gpt4 book ai didi

c++ - 继承自std::vector,编译错误? (最烦人的解析)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:28 26 4
gpt4 key购买 nike

对于看到这个问题的人:查看答案并考虑使用:cdecl

为什么下面的代码会出现编译错误:

prog.cpp: In function ‘int main()’:
prog.cpp:23:4: error: request for member ‘size’ in ‘a’, which is of non-class type ‘RangeVec<int>(RangeVec<int>)’
a.size();
^

我不明白这段代码有什么问题?

#include <iostream>
#include <vector>

template<typename Type>
class RangeVec: public std::vector<Type> {
public:

RangeVec( const RangeVec & v): std::vector<Type>(v){}
RangeVec( const RangeVec && v): std::vector<Type>(std::move(v)) {}

RangeVec( const std::vector<Type> &v)
: std::vector<Type>(v)
{
//std::sort(std::vector<Type>::begin(),std::vector<Type>::end());
}
};

int main(){
std::vector<int> v;
RangeVec<int> b(v);
RangeVec<int> a( RangeVec<int>(b) );
a.size(); // b.size() works ???? why??
}

最佳答案

 RangeVec<int> a(  RangeVec<int>(b) );

这是一个函数声明 a返回 RangeVec<int>并采用一个名为 b 的参数类型 RangeVec<int> .这是 most vexing parse .您可以使用 C++11 的统一初始化语法修复它:

 RangeVec<int> a{RangeVec<int>{b}};

或者,如果您没有 C++11 编译器,只需引入一对额外的括号:

 RangeVec<int> a((RangeVec<int>(b)))

另请注意,从标准容器派生的是 usually a bad idea .

关于c++ - 继承自std::vector,编译错误? (最烦人的解析),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com