我在使用基本C ++程序时遇到链接问题。不,我不包含.cpp
文件!
这就是正在发生的事情。
main.cpp:
#include "header.h"
#include <iostream>
int main() {
std::cout << "Hello!";
}
header.h:
#ifndef _HEADER_H
#define _HEADER_H
class Something {
public:
printContents();
};
#endif
something.cpp:
#include "header.h"
#include <iostream>
Something::printContents() {
cout << "This class's Contents!!";
}
发生的事情是我遇到了编译器错误:某些标准C函数的多个定义,例如
strtod
:g ++ -o ... main.o
build / .... main.o:在功能中
`strtod':
../MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/stdlib.h:318:
strtod的多重定义
build / .something.o:... something.cpp :(。text + 0x0):
首先在这里定义collect2:ld
返回了1个退出状态
如果我在两种情况之一中摆脱了
#include <iostream>
并摆脱了cout
,它将进行编译。这是怎么回事?我正在使用g ++和NetBeans进行编译。我在命令行中尝试过:
g++ *.h *.cpp -o program
同样的事情发生了。
最佳答案
请注意,_HEADER_H
是C ++用户代码中的非法名称-以下划线和大写字母开头的名称保留用于C ++实现。通常,这通常不会引起明显的问题,但是在这种情况下,当您在实现中使用诸如HEADER之类的通用名称时,它可能会出现。
关于c++ - 另一个链接器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1298557/