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退出状态