我有一个包含多个实例的类。我也有一个全球性的功能。我想在我的课程中访问一个变量。但是,我得到一个错误,我无法从静态对象访问非静态引用。有没有解决这个问题的方法?如何在C++中使用静态方法访问非静态引用
在一个文件中我有这样的事情:
Public class A{
public: int angle;
}
在另一个文件中我可能有这样的事情:
#include "A.h"
void changeAngle()
{
A.angle = 5;
}
我有一个包含多个实例的类。我也有一个全球性的功能。我想在我的课程中访问一个变量。但是,我得到一个错误,我无法从静态对象访问非静态引用。有没有解决这个问题的方法?如何在C++中使用静态方法访问非静态引用
在一个文件中我有这样的事情:
Public class A{
public: int angle;
}
在另一个文件中我可能有这样的事情:
#include "A.h"
void changeAngle()
{
A.angle = 5;
}
要访问非静态引用意味着你正在尝试访问对象的属性。要做到这一点,你必须有一个目标:
#include <iostream>
#include <string>
class T
{
public:
std::string s;
static const std::string t;
T() : s("hey") {}
const std::string& getS()
{
return s;
}
static void function()
{
// You need an object
T t;
// To access a non-static reference, from anywhere.
std::cout << t.getS() << std::endl;
}
};
const std::string T::t = "ho";
int main(int argc, const char *argv[])
{
// You don't need an object to call a static member funciton.
T::function();
// Or to access a static attribute.
std::cout << T::t << std::endl;
return 0;
}
输出:
hey
ho
是的,我想在我的第一类静态中做我的变量。但是,它也被其他函数使用,并且不能是静态的。有没有办法在我的全局函数中访问当前实例?也许使用“this->”? –
为什么不将一个A对象作为非const引用传递给全局函数?像'void changeAngle(A&a){a.x = 10; };'?或者更好的是,为什么不用成员函数设置角度void A :: setAngle(int angle){x = angle; }'? – tmaric
也许吧,但是你需要让更多的细节。 – Brian
请显示密码。特别是,成员变量的声明,全局函数的声明以及访问变量的表达式应该是相关的。 – user2079303
我很确定声明'公共类A'是无效的C++。这甚至编译? – user2079303