c++ 非静态成员引用必须与特定对象相对

小白我在使用C++类成员时,遇到错误显示:非静态成员引用必须与特定对象相对

代码片段为:

struct TreeNode {
	int val;
	TreeNode *left;
	TreeNode *right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
	
};
class Solution {
public:
	//static TreeNode* invertTree(TreeNode* root) {	//解决方法
	TreeNode* invertTree(TreeNode* root) {
		if (root == NULL)  return root;
		TreeNode* right = invertTree(root->right);
		TreeNode* left = invertTree(root->left);
		root->left = right;
		root->right = left;
		return root;
	}
};
int main(){
    TreeNode* root = new TreeNode(1);
	TreeNode* root_copy = Solution::invertTree(root);	//	错误位置
}

解决方法是
将以上类的成员函数声明为static。或者函数调用时用ClassName.MemberName的方式。
原因如下:
类的成员有两种:静态成员和实例成员(包括实例和函数)。实例成员的存储空间属于具体的实例,不同实例(对象)的同名成员拥有不同的存储空间;静态成员的存储空间是固定的,与具体的实例(对象)无关,被该类的所有实例共享。

访问静态成员
可以用ClassName::MemberName,
也可以用ClassName.MemberNme,
但最好用前者,因为很容易就可以判定成员是静态成员。

访问实例成员
只能用ClassName.MemberName,
不能用ClassName::MemberName.

本例中就是因为用ClassName::MemberName访问实例变量出错。

发布了34 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/lizhengze1117/article/details/98746628