2014-02-20 50 views
-1

我有一个包含多个实例的类。我也有一个全球性的功能。我想在我的课程中访问一个变量。但是,我得到一个错误,我无法从静态对象访问非静态引用。有没有解决这个问题的方法?如何在C++中使用静态方法访问非静态引用

在一个文件中我有这样的事情:

Public class A{ 
    public: int angle; 
} 

在另一个文件中我可能有这样的事情:

#include "A.h" 

void changeAngle() 
{ 
    A.angle = 5; 
} 
+2

也许吧,但是你需要让更多的细节。 – Brian

+0

请显示密码。特别是,成员变量的声明,全局函数的声明以及访问变量的表达式应该是相关的。 – user2079303

+0

我很确定声明'公共类A'是无效的C++。这甚至编译? – user2079303

回答

1

要访问非静态引用意味着你正在尝试访问对象的属性。要做到这一点,你必须有一个目标:

#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 
+0

是的,我想在我的第一类静态中做我的变量。但是,它也被其他函数使用,并且不能是静态的。有没有办法在我的全局函数中访问当前实例?也许使用“this->”? –

+1

为什么不将一个A对象作为非const引用传递给全局函数?像'void changeAngle(A&a){a.x = 10; };'?或者更好的是,为什么不用成员函数设置角度void A :: setAngle(int angle){x = angle; }'? – tmaric

相关问题