C++ 在C+;中使用友元类和模板时出现范围外错误+;
我正在尝试读取子类C++ 在C+;中使用友元类和模板时出现范围外错误+;,c++,C++,我正在尝试读取子类栏中父类Foo中的int data变量 变量data在private:下初始化,并使用好友类栏 我收到以下编译器错误: $ g++ scopetest.cpp scopetest.cpp: In constructor ‘Bar<T>::Bar()’: scopetest.cpp:33:12: error: ‘data’ was not declared in this scope cout << data; ^ 有什么
栏中父类Foo
中的int data
变量
变量data
在private:
下初始化,并使用好友类栏
我收到以下编译器错误:
$ g++ scopetest.cpp
scopetest.cpp: In constructor ‘Bar<T>::Bar()’:
scopetest.cpp:33:12: error: ‘data’ was not declared in this scope
cout << data;
^
有什么明显的错误吗?用this->data
替换data
,现场演示:。请注意,这远远不是最佳解决方案。受保护的
访问说明符就是为了这个目的而创建的
class Foo
{
protected:
int data;
....
}
@DVNRS我已经这样做了,它仍然抛出一个超出范围的错误。已删除好友声明并将其更改为受保护。Hrm.@dvnrrs在阅读了另一个答案后,现在我把这个->数据
放进去就行了。如果受保护
,你就不需要这样做了。(这不会有什么害处,但这可能是一个迹象,说明有些事情做得不太对。)如果你发布你的尝试,我会看看我是否能发现问题。我明白了。我很害怕。我今天早上进一步研究了一下,发现这是一个(对我来说)很奇怪的问题。如果您在非模板类中尝试此操作,则效果良好(您可以访问受保护的成员,而无需this->
)。但是由于模板的工作方式,编译器要求您使用this->
(有关讨论,请参阅链接)。我不知道这件事。因此,awesomeyi下面的答案是正确的:使用protected
并使用this->
访问它。这个解决方案很有效,但我绝对有兴趣以建议的正确方式进行操作。但是,使用protected并删除friend语句(如@dvnrrs suggered)仍然会产生超出范围的错误?@Bob您可以使用适当的方法执行Bar::data
或this->data
class Foo
{
protected:
int data;
....
}