简单地说,我试图在一个.h或.cpp文件中准备纹理和其他半常量对象,以便它们可以在其他文件中使用。我希望能够做到这样的事情:
class Position
{
private:
int x;
int y;
public:
/* constructor, destructor, and other code */
void setPosition(int x, int y) { this->x = x;
this->y = y; }
};
然后,在另一个文件中,有这样的东西:
//otherfile.extension
// I want to be able to declare these objects here...
Position specialPosition1;
Position specialPosition2;
// ...and then be able to do this somewhere where it will keep
// this information for any other file that includes this.
specialPosition1.setPosition(25, 25);
specialPosition2.setPosition(-10, -10);
我希望能够调用他们的setPosition()
方法并在同一个文件中准备它们,以便在可能的情况下在其他文件中使用。或至少能够进行设置,以便信息在其他地方使用之前就已存在。
如果我记得,让他们静态不会解决这个问题;加上我仍然没有(已知)地方调用setPosition
来准备对象。我也读过一些关于 extern 的内容,虽然我对它的了解只是模糊不清。
我怎样才能在main()
之前准备这些对象,或者更准确一点,在将这些对象用于其他文件之前准备这些对象的“最佳”方法是什么?
答案 0 :(得分:2)
我觉得你根本不想打电话给setPosition
。我认为在构造函数中初始化它们会更好。我认为这些特殊的立场是不变的。
我想你想在.h文件中将它们声明为extern
,然后在.cpp中定义它们:
<强> Position.h:强>
struct Position {
int x;
int y;
Position(int _x, int _y) : x(_x), y(_y) {}
//...
};
<强> SpecialPositions.h:强>
#include "Position.h"
extern const Position specialPosition1;
extern const Position specialPosition2;
<强> SpecialPositions.cpp:强>
#include "SpecialPositions.h"
const Position specialPosition1{25, 25};
const Position specialPosition2{-10, -10};
<强> Main.cpp的:强>
#include "SpecialPositions.h"
#include <iostream>
int main() {
std::cout << specialPosition1.x << "\n";
}
或者您可以强制编译时间常量并使用constexpr
。将Position
构造函数更改为constexpr
:
constexpr Position(int _x, int _y) : x(x_), y(_y) {}
然后在SpecialPositions.h文件中定义它们(不需要SpecialPositions.cpp):
constexpr Position specialPosition1{25, 25};
constexpr Position specialPosition2{-10, -10};