C++ 表达式必须具有类类型(指针向量)
我有一个错误,说“列”必须有类类型C++ 表达式必须具有类类型(指针向量),c++,C++,我有一个错误,说“列”必须有类类型 vector是指针向量,其中Column是一个抽象类,因为我的列可以是int、double或string类型 class Table { vector<Column*> _columns; Column* value; char* name; public: Table() {...} Table(char* name) {...} ~Table() {...} template &
vector
是指针向量,其中Column
是一个抽象类,因为我的列可以是int
、double
或string
类型
class Table {
vector<Column*> _columns;
Column* value;
char* name;
public:
Table() {...}
Table(char* name) {...}
~Table() {...}
template <typename T>
void addColumn(vector<T> v) {
auto column = DataColumnFactory::getColumn();
column.get()->addValuesToVector(v);
_columns.push_back(move(column));
}
int findLongestColumn() {
int length = 0;
for (auto &column : _columns) {
if (length < column.get()->lengthOfColumn()) //ERROR
length = column.get()->lengthOfColumn();
}
}
};
类表{
向量列;
列*值;
字符*名称;
公众:
表(){…}
表(字符*名称){…}
~Table(){…}
模板
void addColumn(向量v){
自动列=DataColumnFactory::getColumn();
column.get()->addValuesToVector(v);
_列。向后推(移动(列));
}
int findlongest列(){
整数长度=0;
对于(自动列:_列)(&U列){
if(长度lengthOfColumn())//错误
长度=column.get()->lengthOfColumn();
}
}
};
问题似乎是您正在访问列
对象的.get()
方法,它是一个指针(而不是编译器抱怨的类类型)。只需将.get
更改为->get
我认为您不需要.get()
。只需编写column->addValuesToVector(v)
和column->lengthOfColumn()
等。get()?或者这是从需要调用才能获取的某个点使用唯一\u ptr的代码迁移而来的?@Wyckstd::unique\u ptr
也有一个操作符->
。@Quentin,但我的观点是,Column*
是一个空指针,您不需要调用get
来访问存储在那里的元素,除非Column
有一个名为get
的方法,addValuesToVector
是另一个类的方法(返回类型为get
)。但这可能只是复制它的其他实现的一个残留特性。