【发布时间】:2015-12-17 01:20:14
【问题描述】:
这是我的第一个问题,所以对于我可能不知道的有关堆栈溢出的任何事情,我提前道歉!
我遇到的问题是我正在制作一个简单的 SDL 程序,目前它只是应该在屏幕上绘制一个 PNG 图像(Assets/Board.png),但我遇到了很多错误两个类相互通信,我认为我有循环包含错误。但是我这几天一直在尝试解决这个问题,但我一直无法解决它。
这是我得到的错误:
http://imgur.com/gallery/vq3XLwU/new
(这里是文字版,格式不好抱歉)
1>d:\code\c++\games\chess\chess\manager.h(41): error C2079: 'Manager::Tex' uses undefined class 'Render'
1>d:\code\c++\games\chess\chess\render.h(32): error C2146: syntax error : missing ';' before identifier 'manager'
1>d:\code\c++\games\chess\chess\render.h(32): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\code\c++\games\chess\chess\render.h(32): error C2146: syntax error : missing ';' before identifier 'manager'
1>d:\code\c++\games\chess\chess\render.h(32): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
(我使用了图像,因为图像的格式更易于阅读。) (也可以点击imgur中的图片查看放大版)
您可以在此处下载整个代码项目(ZIP 文件):
https://www.mediafire.com/?og21315fc1d58sk
但这是我认为导致问题的代码:
(Manager.h 文件)
//Include guards.
#pragma once
//Headers.
#include "Render.h"
//Librarys.
#include <SDL_image.h>
#include <string>
#include <SDL.h>
//Namespaces.
using namespace std;
//Enumerator.
enum State { Play, Exit };
class Manager
{
public:
Manager(); //Constructor.
~Manager(); //Destructor.
//Rendering.
SDL_Window* Window;
SDL_Surface* Screen;
SDL_Renderer* Renderer;
//Functions.
void Run();
void Init();
void Close();
void Input();
void Update();
void Error(string);
//Game variables.
State state;
Render Tex;
private:
//Constant values.
const int WINDOW_POS_X = SDL_WINDOWPOS_CENTERED;
const int WINDOW_POS_Y = SDL_WINDOWPOS_CENTERED;
const int INIT_FLAGS = SDL_INIT_VIDEO;
const int SCREEN_HEIGHT = 600;
const int SCREEN_WIDTH = 600;
};
(这里是 Render.h 文件)
//Include guards.
#pragma once
//Headers.
#include "Manager.h"
//Librarys.
#include <SDL_image.h>
#include <string>
#include <SDL.h>
//Namespaces.
using namespace std;
class Render
{
public:
Render(); //Constructor.
~Render(); //Destructor.
//Functions.
void Draw(int, int); //Draws texture at position.
void Load(string); //Loads texture from path.
void Deallocate(); //Destroy texture.
//Getter functions.
int GetHeight() { return Height; };
int GetWidth() { return Width; };
private:
SDL_Texture* Texture; //Actual image.
Manager manager; //Manager class.
int Height; //Height of image.
int Width; //Wdith of image.
};
因此,总而言之,我遇到了与类对象相关的错误,我认为这是由循环包含引起的,尽管我进行了研究,但我无法解决这些问题。对于这个问题,我将不胜感激。
P.S 我知道我不应该使用 std 命名空间,而是我必须写 std::foo,我知道,所以请不要对此发表评论!
【问题讨论】:
-
你实际上不能这样做。因为
Manager和Render都存储了彼此的实例,所以您需要前向声明一个(或两个)并动态创建实例。您可以将它们存储为std::unique_ptr。 -
谢谢 paddy,但是我应该转发哪个类来声明 Manager 和 Render 类??c
标签: c++ visual-studio class compiler-errors syntax-error