C++//非静态数据成员的无效使用

标签 c++

Code::blocks 说“非静态数据成员的使用无效”。为什么会出现此错误?

class counter {

public:
counter()=default;      //default contructor

friend void upg(){++val;}  //function that increases "val" by 1

private:
    int val=0;

};

最佳答案

upg() 不是成员函数。因此,如果没有 counter 的实例,它就无法访问 val。这会编译,虽然它可能没有多大意义:

friend void upg() { counter c; c.val++; }

更好的解决方案可能是使 upg() 成为成员,

class counter
{
public:
  counter()=default;    // some pointless code "documentation"

  void upg(){ ++val; }  //function that increases "val" by 1

private:
    int val=0;
};

或者,如果你真的需要一个非成员,给它一个counter参数:

friend void upg(counter& c) { c.val++; }

关于C++//非静态数据成员的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29699661/

相关文章:

c++ - 在 C++ 中验证 GPS 字符串的最简单方法?

c++ - std::vector 的非静态数据成员初始值设定项/调用构造函数

c++ - Matlab中perms的非递归实现,兼容Coder

c++ - 当我从 cin 读取时,为什么转义字符不起作用?

c++ - 使用 CRYPTO_thread_setup 的多 SSL 环境

多维数组结构的C++对齐

c++ - 为什么这个 vector 迭代器不能递增?

c++ - 如何在 C++ 中生成 10 个球体

c++ - 如何使用 std::in 和 getline() 在后台进程中检测从 bash 注入(inject)的输入

php - C++/PHP 中的网络机器人