CodeBlocks没有构建我的项目

时间:2014-03-11 16:55:04

标签: c++ gcc codeblocks

每次单击Code OSlocks for Mac OSX中的“运行”或“构建并运行”选项时,我都会收到此对话框:

enter image description here

我查看了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


这些是我的构建消息:

enter image description here


这些是文件,但我不确定内容是否与问题有关(我确保在创建标题和函数定义时检查了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

任何帮助?

2 个答案:

答案 0 :(得分:2)

这是因为您在头文件中定义变量anArray。当它包含在两个translation units中时,它会定义两次,从而导致duplicate symbol错误。

只需在头文件中声明

extern int anMyArray[9];

并在一个(且只有一个)源文件中定义它。

答案 1 :(得分:0)

您在头文件中声明anMyArray,然后将其包含在您的两个cpp文件中,这意味着由于标头扩展,您的变量将被声明两次。

将其移至main.cpp文件。