【问题标题】:A nonstatic member reference must be relative to a specific object非静态成员引用必须相对于特定对象
【发布时间】:2021-05-30 06:03:12
【问题描述】:

我将更复杂的代码简化为这个给出相同错误的简单示例:

class MyClass {

    int i;

public:

    void someFunction() {

        struct MyStruct {

            void someOtherFuction() {
                i++;
            }

        };

        MyStruct mystruct;
        mystruct.someOtherFuction();
    }

};

配合相应的main函数:

#include "MyClass.h"

int main(int argc, char* argv[]) {

    MyClass myClass;

    myClass.someFunction();
}

错误是:

A nonstatic member reference must be relative to a specific object

所以我将int i; 修改为static int i;,但后来又出现了另一个错误:

unresolved external symbol "private: static int MyClass::i"

谁能告诉我解决这个问题的方法是什么?

【问题讨论】:

  • C++ 不是 java。 MyStruct 无论如何都不是MyClass 的一部分,因此没有可以使用的i

标签: c++ oop


【解决方案1】:

您可以将对成员变量i 的引用传递给辅助结构的成员函数。

class MyClass {
    int i = 0;

public:
    void someFunction() {
        struct MyStruct {
            void someOtherFuction(int& ii) {
                ii++;
            }   
        };  

        MyStruct mystruct;
        mystruct.someOtherFuction(i);
    }   
};

int main() {
    MyClass myClass;
    myClass.someFunction();
}

【讨论】:

    【解决方案2】:

    这个解决方案对我有用:

    class MyClass {
    
        int i;
    
    public:
    
        void someFunction() {
    
            struct MyStruct {
    
                int* iPtr;
    
                MyStruct(int* iPtr) {
                    this->iPtr = iPtr;
                }
    
                void someOtherFuction() {
                    *iPtr++;
                }
    
            };
    
            MyStruct mystruct(&i);
            mystruct.someOtherFuction();
        }
    
    };
    

    【讨论】:

      猜你喜欢
      • 2016-08-13
      • 2015-06-01
      • 2018-03-26
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多