0

我在 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) 文件中定义声明的函数时,它也会引发类似的错误。

有任何想法吗?这似乎只发生在这个类中。

另外,如果代码缩进有问题,我深表歉意,我

4

2 回答 2

0

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

GA_Operations::GA_Operations()
{
   // construct
}

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

你有那个地方吗?如果是这样,它是否在同一个文件Application::execute_Algorithm中?

如果不是,它在哪里?您如何将整个程序编译在一起,以便这些不同文件中的内容最终出现在同一个可执行文件中?

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

于 2013-01-21T23:29:53.853 回答
0

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

于 2013-01-24T06:14:53.060 回答