每次单击Code OSlocks for Mac OSX中的“运行”或“构建并运行”选项时,我都会收到此对话框:
我查看了Project>属性>构建目标,这是一些论坛帖子说我应该做的,并且所有文件都被检查但是我一直得到相同的弹出窗口。
这是我的构建日志:
-------------- Build: Release in printarray (compiler: GNU GCC Compiler)---------------
g++ -o bin/Release/printarray obj/Release/arrays.o obj/Release/main.o -s
ld: warning: option -s is obsolete and being ignored
ld: duplicate symbol _anMyArray in obj/Release/main.o and obj/Release/arrays.o for architecture x86_64
collect2: ld returned 1 exit status
这些是我的构建消息:
这些是文件,但我不确定内容是否与问题有关(我确保在创建标题和函数定义时检查了Debug和Release):
的main.cpp
#include <iostream>
#include "arrays.h"
int main()
{
using namespace std;
PrintArray(anMyArray);
return 0;
}
arrays.cpp
#include <iostream>
#include "arrays.h"
void PrintArray(int anArray[])
{
using namespace std;
int nElements = sizeof(anArray) / sizeof(anArray[0]);
for (int nIndex=0; nIndex < nElements; nIndex++)
cout << anArray[nIndex] << endl;
}
arrays.h
#ifndef ARRAYS_H
#define ARRAYS_H
int anMyArray[9] = { 4, 6, 7, 3, 8, 2, 1, 9, 5 };
void PrintArray(int anArray[]);
#endif // ARRAYS_H
任何帮助?
答案 0 :(得分:2)
这是因为您在头文件中定义变量anArray
。当它包含在两个translation units中时,它会定义两次,从而导致duplicate symbol
错误。
只需在头文件中声明
extern int anMyArray[9];
并在一个(且只有一个)源文件中定义它。
答案 1 :(得分:0)
您在头文件中声明anMyArray
,然后将其包含在您的两个cpp文件中,这意味着由于标头扩展,您的变量将被声明两次。
将其移至main.cpp文件。