如何声明对同一类中成员的引用?
Posted
技术标签:
【中文标题】如何声明对同一类中成员的引用?【英文标题】:How to declare a reference to a member in the same class? 【发布时间】:2016-07-06 18:33:29 【问题描述】:我查看了很多其他问题和答案,但似乎没有人有与我相同的问题。
我试图在一个类中引用变量。我取出我正在编写的较大程序的一部分并将其隔离在一个小文件中:test.cpp。我想我的问题可能与我如何将变量与引用一起使用有关,但与较大的程序中出现的消息相同。
这是我的代码:
#include <iostream>
class Test
public:
int test;
int& rtest = test;
;
int main()
std::cout << "Enter an integer: ";
std::cin >> Test.rtest;
std::cout << "\n" << Test.rtest << "\n";
return 0;
我收到了这些消息:
warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
int& rtest = test;
In function ‘int main()’: error: expected primary-expression before ‘.’ token
std::cin >> Test.rtest;
error: expected primary-expression before ‘.’ token std::cout << "\n" << Test.rtest << "\n";
为什么我会得到这些?我正在尝试做的事情可能吗?如果是这样,我该怎么做?
【问题讨论】:
【参考方案1】:警告:非静态数据成员初始化器仅适用于 -std=c++11 或 -std=gnu++11 int& rtest = test;
您需要将标志 -std=c++11
传递给您的编译器,否则它默认为旧版本的 C++,它不允许您以这种方式初始化类成员。
在函数'int main()'中:错误:'.'标记之前的预期主表达式 std::cin >> Test.rtest; 错误:'.' 标记之前的预期主表达式 std::cout
这是因为.
操作员想要您的类的实例,而不是类本身(这就是::
的用途)。声明例如Test test;
并改用 test.rtest
。
【讨论】:
将标志传递给 g++ 确实有效,但我花了几分钟的研究才弄清楚如何做到这一点。【参考方案2】:您需要拥有Test
的实例才能访问类的非静态成员:
int main()
Test t; // <<<<<<<<
std::cout << "Enter an integer: ";
std::cin >> t.rtest;
std::cout << "\n" << t.rtest << "\n";
您还需要使用适当的构造函数初始化引用,除非您启用了 -std=c++11
编译器标志,如错误消息所述:
class Test
public:
int test;
int& rtest; // Nope! = test;
Test() : test(), rtest(test) // <<<<<<<<<<<<<<<<<<
;
【讨论】:
不错的答案。感谢分享编译器标志以上是关于如何声明对同一类中成员的引用?的主要内容,如果未能解决你的问题,请参考以下文章