在c++中创建实例时出现错误

get an error when create instance in c++

本文关键字:错误 实例 c++ 创建      更新时间:2023-10-16

头文件:

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()'

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

有什么想法吗?

谢谢

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

(在某些平台上是FakeMas.oFakeMasTest.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.cpp。告诉它关于FakeMas.cpp,通过改变最后一行:

fakemastest_SOURCES = FakeMasTest.cpp FakeMas.cpp

(这是对您的构建规则的某些假设,没有显示,但这是一个明智的开始)。

编译器似乎找不到FakeMas的声明。要么你没有加

#include "FakeMas.h"

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

using namespace namespace_with_FakeMas;

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

相关文章: