LNK2019 不知从何而来的奇怪错误

问题描述 投票:0回答:1

所以我只是在 Board.h 和 Board.cpp 文件中创建了这个函数,而调用这些函数的其他类找不到它的定义等。其他文件也找不到这些函数的定义。

Board.h:

#pragma once
namespace Sexy
{
    class Board
    {
        public:
            void PlayVirtualTankMusic();
    }
}

板.cpp:

using namespace Sexy;

void Board::PlayVirtualTankMusic()
{
    ...
}

然后是 JukeboxScreen.h,其中定义了函数和内容。还要提一下 GameApp 类具有公共的 Board 对象,并且 JukeboxScreen 具有指向 GameApp 对象的指针实例,从中获取 Board 对象。

点唱机屏幕.cpp

#include "GameApp.h"
#include "Board.h"
using namespace Sexy;

void JukeboxScreen::ButtonDepress(int buttonID)
{
    ...
    mTheApp->mBoard->PlayVirtualTankMusic();
    ...
}

这是链接器错误的片段: 错误 LNK2019 无法解析的外部符号“public: void thiscall sexy::Board::PlayVirtualTankMusic(void)” (?PlayVirtualTankMusic@Board@Sexy@@QAEXXZ) 在函数“public: virtual void thiscall sexy::JukeboxScreen::ButtonDepress(int)”中引用)" (?ButtonDepress@JukeboxScreen@Sexy@@UAEXH@Z) 测试项目 C:\Users\Vasilije\source epos\测试项目\测试项目\JukeboxScreen.obj 1

大家有什么想法吗?

我正在尝试修复链接器错误,可能需要包含某些内容或重组我的代码。

c++ function linker-errors header-files function-definition
1个回答
1
投票

这里

using namespace Sexy;

void Board::PlayVirtualTankMusic()
{
    ...
}

您在全局命名空间中定义了名为

PlayVirtualThankMusic
的类的名为
Board
的方法。虽然班级是
Sexy::Board
using namespace Sexy;
并不意味着接下来的所有内容都在该名称空间内,以防万一这就是您所期望的。您必须在命名空间中定义该方法:

namespace Sexy {
void Board::PlayVirtualTankMusic()
{
    ...
}
}

正如评论中提到的,所示的源文件应该有编译器错误(因为全局命名空间中没有

Board
)。当您报告链接器错误时,我想您根本没有编译源文件。您必须编译所有源文件,然后链接它们。

© www.soinside.com 2019 - 2024. All rights reserved.