我很难理解为什么这段代码无法编译。
我有三个文件:
main.cpp
(当然其中还有更多内容,但是即使我将除了
(我使用以下命令进行编译)
这是我得到的错误信息:
事情是这样的,它似乎解析了两次 expression.h。如果我只使用 main.cpp 或 expression.cpp 编译它,我就不会遇到错误。编译器只是忽略我的 #ifndef 并继续进行... 有什么线索吗?
我有三个文件:
main.cpp
#include "expression.h"
int main(int argc, char** argv)
{
return 0;
}
expression.h
#ifndef _EXPRESSION_H
#define _EXPRESSION_H
namespace OP
{
char getSymbol(const unsigned char& o)
{
return '-';
}
};
#endif /* _EXPRESSION_H */
和expression.cpp文件相关
#include "expression.h"
(当然其中还有更多内容,但是即使我将除了
#include
之外的所有内容都注释掉,它也不起作用)(我使用以下命令进行编译)
g++ main.cpp expression.cpp -o main.exe
这是我得到的错误信息:
C:\Users\SCHIER~1\AppData\Local\Temp\ccNPDxb6.o:expression.cpp:(.text+0x0): multiple definition of `OP::getSymbol(unsigned char const&)'
C:\Users\SCHIER~1\AppData\Local\Temp\cc6W7Cpm.o:main.cpp:(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
事情是这样的,它似乎解析了两次 expression.h。如果我只使用 main.cpp 或 expression.cpp 编译它,我就不会遇到错误。编译器只是忽略我的 #ifndef 并继续进行... 有什么线索吗?