gpt4 book ai didi

c++ - 使用 Xcode 编译 C++ 代码时出现问题

转载 作者:行者123 更新时间:2023-11-28 08:22:57 27 4
gpt4 key购买 nike

我试图在 Xcode 中编译一些 C++ 代码,但出现了这个错误:

Undefined symbols:
"Editorial::sm_nTotalEditorials", referenced from:
Editorial::AskTotal() in editorial.o
Editorial::~Editorial()in editorial.o
Editorial::~Editorial()in editorial.o

列表后面还有两个析构函数条目和四个构造函数条目(我相信这是我使用 sm_nTotalEditorials 的唯一函数)。我附上变量的定义和我使用它的函数。

class Editorial
{
private:
static int sm_nTotalEditorials;
...
}

int Editorial::AskTotal() {return sm_nTotalEditorials;}

Editorial::~Editorial()
{
if (!m_pPrev) sm_pFirstEditorial=m_pNext;
if (m_pPrev) (*m_pPrev).SetContext((*m_pPrev).AskPrev(),m_pNext);
if (m_pNext) (*m_pNext).SetContext(m_pPrev,(*m_pNext).AskNext());
sm_nTotalEditorials--;
}

然后它会打印与我正在使用的其他 3 个静态私有(private)变量类似的错误。我一定是在用静态用法搞砸了。这是我的第一个 C++ 代码,所以对于任何错误的语法或问题太愚蠢,我深表歉意;我尝试在互联网上搜索,但 Xcode 打印的错误非常模糊,根据我看到的教程,我正在使用所有应该使用的东西。另外,打印所有代码的代码很长,我粘贴了我认为错误的部分,但同样我也不确定。

最佳答案

在 C++ 中,为类创建静态数据成员是一个两步过程。首先,您必须声明您已在此处完成的变量。但是,您还必须在某个地方定义它,以便编译器知道将变量的存储空间放在哪里。通常,这是在类的 .cpp 文件中完成的。在 .cpp 文件中,尝试添加以下行:

int Editorial::sm_nTotalEditorials = 0;

这为编译器提供了它需要的定义,因此您不会再收到任何提示缺少定义的链接器错误。您可能还想对其他静态数据成员执行此操作。

请注意,在进行此类定义时,不要重复使用 static 关键字;这会给静态字段静态链接,这不会解决问题。

关于c++ - 使用 Xcode 编译 C++ 代码时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com