Joã*_*lva 2 c++ class undefined extern
首先我要说的是,我已经在google上广泛搜索了答案,更具体地说.
事实上我(至少我认为我做过)找到了类似问题的人,虽然给他们的答案给了我另一个问题.
我正在使用Visual Studio 2010 Express并使用SFML库(尽管我不认为这最后一部分是相关的)
所以这里:
我有一个名为player.cpp的源文件,它包含类Player,我有一个名为cc.h(命令和控制)的头文件(包含在所有源文件中),它包含所有必需的包含和外部变量/函数.基本代码可以总结如下:
Player.cpp:
#include "cc.h"
class Player
{
private:
//some variables here
public:
//more variables and some functions
}john;//example instance
Run Code Online (Sandbox Code Playgroud)
cc.h:
#pragma once
//some #includes
//some externs
extern Player john;
Run Code Online (Sandbox Code Playgroud)
现在在cc.h中,单词Player被强调为错误,表示它是一个未定义的标识符,但有时只是,有时,visual studio不会将其标记为错误,而是将其识别为类但不识别john作为同一个类的对象/实例(我希望它是这样称呼的).此外,在编译第一个错误时,它显示error C2146: syntax error : missing ';' before identifier 'john'在约翰的外部声明的行中,在cc.h中,显然(对我来说)没有任何意义.
我认为cc.h中的全局声明对你没有帮助 - 因为你声明它从其他地方(除了Player.cpp之外)访问它,但为此你需要方法签名 - 你想要john从在其他地方,因此包括Player.cpp,你得到重复的符号.
请考虑创建一个Player.h只声明类和方法签名的文件 - 如下所示:
#ifndef PLAYER_H_
#define PLAYER_H_
class Player
{
void doSomething();
};
#endif
Run Code Online (Sandbox Code Playgroud)
并将其添加到cc.h:
#include <Player.h>
extern Player john;
Run Code Online (Sandbox Code Playgroud)
并在你的Player.cpp
#include <Player.h>
Player john;
void Player::doSomething()
{
//...
}
Run Code Online (Sandbox Code Playgroud)
这可确保Player签名已知并且全局声明有效实例.
| 归档时间: |
|
| 查看次数: |
24718 次 |
| 最近记录: |