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的代码迁移而来的?@Wyck
std::unique\u ptr
也有一个
操作符->
。@Quentin,但我的观点是,
Column*
是一个空指针,您不需要调用
get
来访问存储在那里的元素,除非
Column
有一个名为
get
的方法,
addValuesToVector
是另一个类的方法(返回类型为
get
)。但这可能只是复制它的其他实现的一个残留特性。