Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中使用友元类和模板时出现范围外错误+;_C++ - Fatal编程技术网

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;
 ....
}