我在使用基本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/

10-11 22:45
查看更多