![]() |
1
63
问题是以下代码是一个定义,而不是一个声明:
您可以将上面的函数标记为“inline”,以便多个翻译单元可以定义它:
或者您可以简单地将函数的原始定义移动到“complex.cpp”源文件中。 编译器不会抱怨“real()”,因为它是隐式内联的(在类声明中给出其主体的任何成员函数都会被解释为已声明为“inline”)。预处理器保护防止头从单个翻译单元(“*.cpp”源文件)包含多次。但是,两个翻译单元看到相同的头文件。基本上,编译器将“main.cpp”编译为“main.o”(包括“main.cpp”包含的头中给出的任何定义),编译器将“complex.cpp”单独编译为“complex.o”(包括“complex.cpp”包含的头中给出的任何定义)。然后链接器将“main.o”和“complex.o”合并到一个二进制文件中;在这一点上,链接器为一个同名函数找到了两个定义。也正是在这一点上,链接器试图解析外部引用(例如,“main.o”指的是“Complex::Complex”,但没有该函数的定义。。。链接器从“complex.o”中定位定义,并解析该引用)。 |
![]() |
2
5
将实现移到complex.cpp 现在,在包含此文件之后,正在将实现编译到每个文件。 稍后在链接过程中,由于重复的实现,会出现明显的冲突。 ::real()未报告,因为它是隐式内联的(类定义内的实现) |
![]() |
3
1
我有这个问题,即使在我的源和头文件是正确的。
要修复,请使用
|
![]() |
4
0
定义
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |