为什么我有一个多重定义的stream对象?

时间:2017-10-12 21:08:01

标签: c++ c++14

gcc 6.4.0 Netbeans 8.2 cygwin64

我不知道如何修复多重定义的符号问题。我的包含文件有警卫,没有其他符号同名。链接器显示符号testoutput是多重定义的。无论我在'ofstream'声明中使用什么名称,都会多次定义。我可以通过创建一个stringstream变量并传递给输出函数来避免这个问题,但这似乎是一个非常糟糕的主意。我可以传递一个i / o变量吗?

包括测试代码和链接器输出:

#ifndef COMMON_H
#define COMMON_H
# include <fstream>

   using namespace std;
   ofstream testout;

#endif  /* COMMON_H */


#ifndef FILE_H
#define FILE_H
# include "Common.h"
class myClass {
public:
   void outStuff();
};

#endif /* FILE_H */

# include "File.h"
# include "Common.h"

void myClass::outStuff() {
   testout << "another thing" << endl;
};

# include "Common.h"
using namespace std;
int main(int argc, char** argv) {
   testout.open("test.out");
   testout << "out" << endl;
}

======================== UUILD ====================== ========     干净成功(总时间:255毫秒)     cd'C:\ home \ skidmarks \ Projects \ Test \ Test'     c:\ cygwin64 \ bin \ make.exe -f Makefile CONF = Debug     “/ usr / bin / make”-f nbproject / Makefile-Debug.mk QMAKE = SUBPROJECTS = .build-conf     make [1]:输入目录'/ c / home / skidmarks / Projects / Test / Test'     “/ usr / bin / make”-f nbproject / Makefile-Debug.mk dist / Debug / Cygwin64-Windows / test.exe     make [2]:输入目录'/ c / home / skidmarks / Projects / Test / Test'     mkdir -p build / Debug / Cygwin64-Windows     rm -f“build / Debug / Cygwin64-Windows / File.o.d”     g ++ -Wall -Wunused-variable -c -g -MMD -MP -MF“build / Debug / Cygwin64-Windows / File.o.d”-o build / Debug / Cygwin64-Windows / File.o File.cpp     mkdir -p build / Debug / Cygwin64-Windows     rm -f“build / Debug / Cygwin64-Windows / main.o.d”     g ++ -Wall -Wunused-variable -c -g -MMD -MP -MF“build / Debug / Cygwin64-Windows / main.o.d”-o build / Debug / Cygwin64-Windows / main.o main.cpp     mkdir -p dist / Debug / Cygwin64-Windows     g ++ -o dist / Debug / Cygwin64-Windows / test build / Debug / Cygwin64-Windows / File.o build / Debug / Cygwin64-Windows / main.o ../../../../../cygwin64 /usr/local/lib/libgslip.a     build / Debug / Cygwin64-Windows / main.o:/c/home/skidmarks/Projects/Test/Test/Common.h:8:`testout'的多重定义     build / Debug / Cygwin64-Windows / File.o:/c/home/skidmarks/Projects/Test/Test/Common.h:8:首先在这里定义     collect2:错误:ld返回1退出状态

0 个答案:

没有答案