gpt4 book ai didi

c++ - 声明外部类对象的问题

转载 作者:太空狗 更新时间:2023-10-29 23:46:48 28 4
gpt4 key购买 nike

首先让我说我已经在谷歌上广泛搜索了答案,更具体地说是在这里。

问题是我实际上(至少我认为我做到了)找到了有类似问题的人,尽管给他们的答案给了我另一个问题。

我正在使用 Visual Studio 2010 Express 并使用 SFML 库(尽管我认为这最后一部分不相关)

就是这样:

我有一个名为 player.cpp 的源文件,它包含 Player 类,我有一个名为 cc.h(命令和控制)的头文件(包含在所有源文件中),它包含所有必要的包含和外部变量/函数。基本代码可以总结如下:

播放器.cpp:

#include "cc.h"
class Player
{
private:

//some variables here

public:

//more variables and some functions

}john;//example instance

cc.h:

#pragma once

//some #includes
//some externs

extern Player john;

现在在 cc.h 中,Player 一词被加下划线表示是一个错误,表示它是一个未定义的标识符,但只是有时,其他时候 visual studio 不会将其标记为错误,而是识别它作为一个类,但不将 john 识别为同一类的对象/实例(我希望它这样称呼)。此外,在编译时显示的第一个错误是“error C2146: syntax error : missing ';'在 cc.h 中 john 的外部声明行的标识符“john”之前”,这显然(对我而言)没有任何意义。

最佳答案

cc.h 中的全局声明对你没有帮助,我猜 - 因为你声明它可以从其他地方访问它(Player.cpp 除外),但为此你需要方法签名 - 只要你想要从其他地方访问 john 并因此包含 Player.cpp,您会得到重复的符号。

请考虑创建一个 Player.h 文件,其中仅声明类和方法签名 - 如下所示:

#ifndef PLAYER_H_
#define PLAYER_H_

class Player
{
void doSomething();
};
#endif

并将其添加到 cc.h 中:

#include <Player.h>
extern Player john;

在你的 Player.cpp 中

#include <Player.h>

Player john;

void Player::doSomething()
{
//...
}

这确保了 Player 签名是已知的,并且全局声明了一个有效的实例。

关于c++ - 声明外部类对象的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910047/

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