- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 C++ 的新手,对声明类的语法很困惑。
根据我收集到的信息,您应该将所有声明存储在一个头文件中,我将其称为 declarations.h;
#pragma once
void incptr(int* value);
void incref(int& value);
class Player
{
public:
int x, y;
int speed;
void Move(int xa, int ya)
{
x += xa * speed;
y += ya * speed;
}
void printinfo()
{
std::cout << x << y << speed << std::endl;
}
};
现在 Player 是一个我想存储在名为 functions.cpp 的 cpp 文件中的类
我想将上面的 Player 类移动到下面的文件 functions.cpp 中
#include "common.h"
void incptr(int* value)
{
(*value)++;
}
void incref(int& value)
{
value++;
}
common.h包含;
#pragma once
#include <iostream>
#include <string>
#include "declarations.h"
我认为发生的事情是,当我在头文件中编写 Player 类时,它已在该文件中声明,嗯,已经存在了。如果我将 Player 类移动到 functions.cpp 中,我需要留下声明。当涉及到类时,我不确定编译器期望什么作为声明。
我试过了;
class Player();
functions::Player();
void Player::Move(int xa, int ya);
还有一些其他变体,但这些对我来说最有意义。
抱歉,如果这有点困惑,仍在尝试掌握语言。在此先感谢您的帮助!
编辑:对不起,我错过了主要功能;
#include "common.h"
int main()
{
Player player = Player();
player.x = 5;
player.y = 6;
player.speed = 2;
player.Move(5, 5);
player.printinfo();
std::cin.get();
}
最佳答案
一个类的声明就像
class Player; // Note there are no parentheses here.
当两个类之间存在循环依赖时,最常使用这种形式。更常见的做法是在头文件中定义类,但将成员函数的定义放在 .cpp 文件中。为了您的目的,我们可以创建一个名为 player.h
的头文件:
class Player
{
public:
int x, y;
int speed;
void Move(int xa, int ya);
void printinfo();
};
请注意,此声明不包含成员函数的主体,因为它们实际上是定义。然后您可以将函数定义放在另一个文件中。将其命名为 player.cpp
:
void Player::Move(int xa, int ya)
{
x += xa * speed;
y += ya * speed;
}
void Player::printinfo()
{
std::cout << x << y << speed << std::endl;
}
请注意我们现在如何使用 Player::
语法指定这些函数中的每一个都是 Player
类的成员。
现在假设您还有一个包含main()
函数的main.cpp
文件,您可以像这样编译代码:
g++ main.cpp player.cpp
对于这个简单的示例,您可以在类声明中定义您的函数。请注意,这会使函数“内联”,这是您应该阅读的另一个主题。
关于c++ - 如何在 C++ 中声明一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52847429/
我是一名优秀的程序员,十分优秀!