0

头文件:

class FakeMas
{
   FakeMas();
   ~FakeMas();
}

CPP 文件:

FakeMas::FakeMas(){........}
FakeMas::~FakeMas(){}

我写了一个cpp文件来测试FakeMas:

class FakeMasTest{
    void test() 
    {
        FakeMas fakemas;            
        fakemas.start();
    }
}

项目中名为“zinc.testwebserver”的类

如果我建造它,它会说

FakeMasTest.cpp:29: undefined reference to `zinc::testwebserver::FakeMas::FakeMas()'"

如果我将测试更改为:

FakeMas::FakeMas * fakemas = new FakeMas::FakeMas();

它说

error: ‘fakemas’ was not declared in this scope

如果我将测试更改为:

FakeMas * fakemas = new FakeMas();

它说

undefined reference to `zinc::testwebserver::FakeMas::FakeMas()'

我真的不知道该怎么做...

有什么想法吗?

谢谢

4

2 回答 2

1

这听起来像是一个链接错误:来自的目标代码FakeMas.cpp没有与来自的目标代码链接FakeMasTest.cpp

(这些将在某些平台上,FakeMas.o在其他平台上 - 你没有指定你的)。FakeMasTest.o.obj

因此,您的代码可以编译,但不能形成可执行文件。解决方案取决于您的构建系统(您也没有指定),但本质上是告诉它您的可执行文件依赖于并且应该包含两个目标文件。


您得到的不相关错误是因为这是无效的:

FakeMas::FakeMas * fakemas = new FakeMas::FakeMas();

它应该是:

FakeMas * fakemas = new FakeMas();

(然后您将返回相同的链接错误)。


从您的 Makefile 中:

CppUnit_Tests = fakemastest
TESTS = $(CppUnit_Tests)
testdir = $(prefix)/tests/@PACKAGE@/test
test_PROGRAMS = $(CppUnit_Tests)

fakemastest_SOURCES = FakeMasTest.cpp

您是在告诉 Make 可执行文件fakemastest依赖于. 通过更改最后一行来告诉它:FakeMasTest.cppFakeMas.cpp

fakemastest_SOURCES = FakeMasTest.cpp FakeMas.cpp

(这是对您的构建规则做出某些假设,未显示,但这是一个明智的起点)。

于 2013-01-09T16:53:15.927 回答
0

似乎编译器找不到FakeMas. 要么你没有添加

#include "FakeMas.h"

或者您需要指定正确的命名空间:

using namespace namespace_with_FakeMas;

编译器消息显示编译器正在命名空间中寻找类声明zinc::testwebserver。似乎这与FakeMas声明的名称空间不同。

于 2013-01-09T16:48:54.987 回答