c++对象未在文件之间注册
c++ Object not registered across files
所以我是编程新手,基本上我所知道的一切都是自学成才的,经历了一个又一个小时的愚蠢错误和同样的实现,但这简直要了我的命。每当我尝试编译时,我都会得到以下结果:
"应在'.'标记之前使用主表达式">
问题可能是存在的,因为我喜欢保持我的东西整洁,因此把它分成多个文件,在这一行的某个地方,我的对象会丢失,或者其他什么。以下是错误的位置:
主要.cpp
void start()
{
Player Player; //Making the object Player, it works for the main file, but Combat.h
int num, x, j=0; //doesn't really like it for whatever reason.
int stats[] = {2,3,4,5,4,1,8,5,8,7,6,5};
int realstats[]={};
string classes[] = {"Warrior", "Mage", "Priest", "Rogue", "Hunter", "Druid"},name;
cin>>name; //Charr's name
cin>>num; //class number for stat-sorting purpouses
for(x=num*4,j;x<num*4+4;++x,++j)
{
realstats[j]=stats[x];
}
Player.def=realstats[0];
Player.str=realstats[1];
Player.agi=realstats[2];
Player.intel=realstats[3];
}
PlayerEnemy.h
#include"MainHeader.h"
#ifndef PlayerEnemy_H
#define PlayerEnemy_H
class Player
{
public:
float att,def,str,agi,intel,HP,XP,sp,money;
float setstat(float str,float def,float agi,float HP,float att,float sp);
};
class Enemy
{
public:
float att,def,str,agi,intel,HP,XP,sp,money;
float setstat(float str,float def,float agi,float HP,float att,float sp);
};
#endif
Combat.h
#include"MainHeader.h"
#ifndef Combat_H
#define Combat_H
void Combat(int x)
{
int GG();
int y=1;
system("pause");
while(monster[x].HP>0 && Player.HP>0)
{
if(monster[x].sp>Player.sp&&y==1)
{
Player.HP-=(monster[x].att-Player.def);
x=0;
}
if(Player.HP>0&&monster[x].HP>0) monster[x].HP-=(Player.att-monster[x].def);
if(Player.HP>0&&monster[x].HP>0) Player.HP-=(monster[x].att-Player.def);
}
if(monster[x].HP<=0)
{
Player.money+=monster[x].money;
Player.XP+=monster[x].XP;
}
else GG();
}
#endif
"MainHeader.h"只是我制作的一个包含其他页眉的页眉,因为我不希望前20行只是#include。
无论如何,如果我在战斗.h中从类Player中重新创建另一个名为Player的对象,所有对象都可以,但它们的值不相同,如果我删除了第一个,代码的其余部分就会下地狱。据我所知,它应该告诉我球员已经被宣布,所以我不知道我哪里出了问题。
这是MainHeader.h,以防我遗漏了什么。。。不过别这么认为。但话说回来,是我的代码不起作用。
#ifndef MainHeared_H
#define MainHeared_H
#include"PlayerEnemy.h"
#include"EnemyType.h"
#include"Combat.h"
#endif
到目前为止,任何源文件中的代码都只能"查看"该文件中的其他内容,以及任何包含的头文件。不进入其他cpp文件。
您有一个类名Player
,它在标头中定义,并且可以从Combat
函数中看到。但是变量声明
Player Player;
仅在其声明范围内可见,即start()
函数。其他函数看不到此变量,更不用说其他文件了。
当Combat
编写类似Player.ID
的内容时,编译器只知道Player
是类名,而将.
放在类名之后是没有意义的。
要解决这个问题,首先要做的是停止将类的名称用作变量。这很令人困惑。例如,写入:
Player my_player;
第二件事是不要把函数代码放在头中。如果在整个项目中多次包含标头,则会导致未定义的行为。Combat()
的正文应该在.cpp
文件中。您可以在头中放入函数声明,但仅此而已:
void Combat(int x);
如果您想拥有一个所有代码都可见的Player
实例,那么您必须在头文件中写入:
extern Player global_player;
然后在.cpp
文件中的一个中,在任何函数体之外:
Player global_player;
Player Player; // this is wrong
Player player // this is OK
您不应该使用类型名称作为标识符。
Player.def=realstats[0]; // "expected primary-expression before '.' token"
你指的是对象还是类??
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 无法将结构注册为增强几何体3D点
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 如何使用AngelScript注册SFML Vector2运算符
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/无注册的 COM
- Lua注册表与轻用户数据和引用之间的区别是什么?
- c++对象未在文件之间注册
- 有谁知道免注册COM和拖放功能之间可能存在哪种关系