中易网

C++中关于#include,文件保护和符号重定义

答案:2  悬赏:60  
解决时间 2021-11-09 07:40
  • 提问者网友:西路不相离
  • 2021-11-08 15:53
一个函数的定义放在头文件中,已经加了#pragma once,为什么被两个cpp文件include还会报符号重定义的错误呢。按照#pragma once的意思,就是当被第一次包含后,第二次包含将忽略头文件中的内容,那么一个函数应该只定义一次啊,并没有重定义。
举例如下:
//A.h
#pragma once
class A
{
public:
void TestA();
void InACPP();
}

void TestA()
{}
//A.cpp
#include"A.h"
void A::InACPP()
{}
//main.cpp
#include "A.h"
int main()
{
A a;
return 0;
}
我知道这里成员函数是外部链接性,但是我这里只定义了一次啊,虽然被包含了两次,但是有头文件保护啊,但是为什么还会报错呢?
最佳答案
  • 二级知识专家网友:狠傷凤凰
  • 2021-11-08 16:09
头文件保护只能保护在一个cpp文件内,同一个头文件不会被两次include
而你的问题是,在两个cpp文件内都include了这个头文件。头文件中应该只放函数的声明而不能放函数的定义,如果放了定义,就像你写的那样,两个cpp文件include了这个头文件,那么就会出现两次定义的问题。可以重复声明不能重复定义,所以会报错。
全部回答
  • 1楼网友:厌今念往
  • 2021-11-08 16:31
搜一下:C++中关于#include,文件保护和符号重定义
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息