我正在尝试将对象发送到另一个类,尽管我遇到了问题。
错误: 在构造函数StartGame :: StartGame(EntitySystem&)中:
错误:类StartGame没有任何名为ES的字段
Main.cpp
#include <iostream>
#include "EntitySystem.h"
#include "StartGame.h"
using namespace std;
int main()
{
EntitySystem ES;
StartGame SG(ES);
SG.Start();
return 0;
}
StartGame.h
#ifndef STARTGAME_H
#define STARTGAME_H
#include "EntitySystem.h"
#include <iostream>
using namespace std;
class StartGame
{
public:
StartGame(EntitySystem&);
void ClassSelection();
void Start();
virtual ~StartGame();
};
StartGame.cpp
#include "StartGame.h"
#include "EntitySystem.h"
#include "windows.h"
#include "stdlib.h" // srand, rand
#include <iostream>
#include <ctime> //time
using namespace std;
StartGame::StartGame(EntitySystem& ES) : ES(ES)
{
}
我做了一些谷歌搜索,无法想象 提前谢谢。
答案 0 :(得分:2)
因为在构造函数的 member-initialization-list 中,您正在尝试初始化一个名为ES
的成员,该成员不存在...
您可以在类的声明中执行此操作来修复它:
class StartGame
{
public:
StartGame(EntitySystem&);
void ClassSelection();
void Start();
virtual ~StartGame();
protected:
private:
EntitySystem ES;
// ^^^^^^^^^^^^^^^^
};
// in the .cpp
StartGame::StartGame(EntitySystem& ES)
: ES(ES)
// ^^ Now this member exists
{
}
但我建议您重命名您的参数或您的成员,因为两者的名称相同可能会令人困惑......
答案 1 :(得分:0)
您的代码执行此操作:
StartGame::StartGame(EntitySystem& ES)
: ES(ES)
让我们打破这个:
":" <- means "Memberwise initialization"
"ES(" <- means "call the constructor for member 'ES'"
"(ES)" <- these are the arguments to pass to the constructor
"{ ... }" <- here is the constructor body itself.
麻烦的是,你的班级没有名为“ES”的成员。
但你也有次要问题。
"ES(ES)"
如果您有一个名为“ES”的成员变量,则此处会有冲突。
您可能希望使用几种广泛使用的做法来避免将来出现类似问题。
void myFunction(int arg1_, int arg2_) { ...
e.g。
static size_t s_counter = 0; // count of how many things we've done.
extern size_t g_nowServing; // imported from another module.
class Customer {
size_t m_ticketNo; // which ticket number I pulled
std::string m_licensePlate;
public:
Customer(size_t ticketNo_, const char* licensePlate_)
: m_ticketNo(ticketNo_)
, m_licensePlate("")
{
// somewhat artificial implementation for demonstrative purposes.
char licensePlate[8] = "\0\0\0\0\0\0\0";
for (size_t i = 0; i < sizeof(licensePlate); ++i) {
if (!isalnum(licensePlate_[i]))
throw CustomerException("invalid character in license plate");
licensePlate[i] = licensePlate_[i];
}
if (licensePlate[sizeof(licensePlate) - 1] != '\0')
throw CustomerException("invalid license plate -- too long");
m_licensePlate = licensePlate;
}
};
这样可以更轻松地立即诊断代码中的问题:
StartGame::StartGame(EntitySystem& es_)
: m_es(es_)
{
}
这会产生编译错误error: class StartGame does not have any field named m_es
和宾果游戏 - 你本可以立即回答这个问题。