【发布时间】:2009-08-19 08:42:41
【问题描述】:
我遇到了一个基本 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'的多重定义
构建/..something.o:...something.cpp:(.text+0x0): 首先在这里定义 collect2:ld 返回 1 个退出状态
如果我在两种情况之一中删除#include <iostream> 并删除couts,它将编译。这是怎么回事?我正在使用 g++ 和 NetBeans 进行编译。
我在命令行中试过:
g++ *.h *.cpp -o program
同样的事情发生了。
【问题讨论】:
-
我很惊讶你甚至可以使用该代码访问链接器。
-
您能否详细说明如何编译和链接?
-
我最终解决了这个问题。修复代码和#ifndef 修复了这一切。我仍然不完全确定错误是如何发生的。我制作了自己的 makefile,错误似乎消失了。
标签: c++ linker header-files