所以我试图在我的C ++项目中声明一个类,然后在main中创建它。
所以我有player_obj.cpp,它包含类,classes.h用于声明类,main.cpp用于它。
classes.h
#ifndef CLASSES_H
#define CLASSES_H
class player_class
{
public:
int x;
int y;
char sprite;
int xprevious;
int yprevious;
private:
bool active;
public:
void update_xy();
player_class(int _x, int _y, char _sprite);
void step();
void destroy();
};
#endif
的main.cpp
#include <iostream>
#include "classes.h"
using namespace std;
int main()
{
player_class player_obj (5,5,'#');
cout << player_obj.x << ", " << player_obj.y << endl;
return 0;
}
和player_obj.cpp
#include <iostream>
#include <Windows.h>
using namespace std;
class player_class
{
public:
//Coordinates
int x;
int y;
//Sprite
char sprite;
//Previous coordinates
int xprevious;
int yprevious;
//Not everyone can set the activity
private:
//Active
bool active;
//Update xprevious and yprevious - Called by the step event
void update_xy()
{
xprevious = x;
yprevious = y;
}
//All functions public
public:
//Create event/Constructer
player_class(int _x, int _y, char _sprite)
{
//Set default variables
x = _x;
y = _y;
sprite = _sprite;
xprevious = x;
yprevious = y;
active = true;
}
//Step event
void step()
{
//Update old xprevious and yprevious
update_xy();
//Do other stuff here
}
//Drestroy event
void destroy()
{
active = false;
}
};
我认为这样可行,但是当我编译并运行它时,我得到:
main.cpp:(.text+0x2c): undefined reference to`player_class::player_class(int, int, char)'
我做过一些研究,但我似乎无法解决这个问题。
我非常感谢任何帮助!
答案 0 :(得分:0)
嗯,你有点接近,你头上的内容确实是一个类声明(不是前瞻性声明)。
问题是你从未定义过它。你在player_obj.cpp
中所拥有的是对类重新定义的憎恶,但你已经宣布了你的类。只需包含头文件并逐个定义功能即可完成!
#include "classes.h"
player_class::player_class(int _x, int _y, char _sprite)
{
//Set default variables
x = _x;
y = _y;
sprite = _sprite;
xprevious = x;
yprevious = y;
active = true;
}
// and so on
如果您认真学习现代C ++,请注意以下几点:
#pragma once
是保护头文件的现代方法。不要使用那些#ifdef..#endif
构造。答案 1 :(得分:0)
你不想要前瞻声明。你想要一个声明。这是在头文件中声明类并在cpp文件中定义其函数的经典案例。然后包括你想要使用你的班级的标题
当您想要使用指向该类的指针作为某个函数或成员变量的参数时,您只需要前向声明,但该类的定义尚不可用。 请注意,当您转发声明一个类时,您不能在该标头中使用此类的成员变量或函数
-regards 高塔姆