持久的未定义引用

时间:2013-01-21 23:23:37

标签: c++ eclipse

我在MAC OS X上的Eclipse中有一个持久的未定义符号错误。我无法想象 找出错误的来源。

当我尝试使用GA_Operations和gaAlgorithm-> run_algorithm .....时,根据编译器发生错误:

int Application::execute_Algorithm()
{

    if (this->GA_On)
{
    GA_Operations *gaAlgorithm = new GA_Operations();
    gaAlgorithm->run_algorithm(blocksSequence, bins);
}

else
{
    packingAlgorithm->run_algorithm(blocksSequence, bins); return 0;
}                       //

return 0;
}

显示的错误是:  Undefined symbols for architecture x86_64: "binproject::GA_Operations::run_algorithm(binproject::Blocks_Sequence&, binproject::BinContainer&)", referenced from: binproject::Application::execute_Algorithm() in Application.o "binproject::GA_Operations::GA_Operations()", referenced from: binproject::Application::execute_Algorithm() in Application.o

声明是:

class GA_Operations {
public:


GA_Operations();
~GA_Operations();


//call from main application to execute algorithm

void run_algorithm(Blocks_Sequence &b_seq, BinContainer &container);
... 

};

当我尝试在中定义声明的函数时,它也会抛出类似的错误 实施(CPP)文件。

有什么想法吗?这似乎只发生在这门课上。

另外,如果代码缩进有问题,我很抱歉,我是

2 个答案:

答案 0 :(得分:0)

您显示的错误是链接器错误。这意味着编译器认为某些内容存在,但链接器无法找到您定义(未声明)它的位置。某处你需要这样的东西:

GA_Operations::GA_Operations()
{
   // construct
}

void GA_Operations::run_algorithm(Blocks_Sequence &b_seq, BinContainer &container)
{
   // stuff
}

你有吗?如果是,它是否在Application::execute_Algorithm所在的文件中?

如果不是,它在哪里?你是如何编译整个程序的,所以这些不同文件中的东西最终都在同一个可执行文件中?

我完全不确定如何让Eclipse做你需要的。我知道这是可能的,但我熟悉纯粹的命令行工具。您需要告诉Eclipse,包含上述定义的.cpp文件是项目的一部分,应该编译并链接到您创建的可执行文件中。

答案 1 :(得分:0)

原来这是链接器设置的问题。我开始自动生成makefile,问题自行解决。