在我之前的问题I was enquiring about the argument type of a class template in other class template中。
简而言之,在类I中,可以通过创建对象并调用它来调用成员函数,也可以通过直接使用范围解析运算符来调用成员函数。 现在,我想在以下2个类模板中使用它。 第一类模板是:
template<typename T>
class Point {
public:
//constructor
Point () { }
//initialise the vector
Point(std::vector<T> &vector);
//deconstructor
~Point () { }
//to calculate distance between two points
T distance(const Point &p1, const point &p2);
//members
std::vector<T> data_points;
int dimensions;
int name;
};
第二类模板是:
template<typename T>
class calculate {
public:
bool initialise(const std::vector<Point<T>> &points);
bool load_points(const std::string &filepath, std::vector<Point<T>> *dpt);
const std::vector<Point<T>> &getPoints() const
{
return points;
}
const std::vector<Point<T>> &getMeans() const
{
return means;
}
private:
std::vector<Point<T>> means;
std::vector<Point<T>> points;
};
以下是一段“main.cc”:
//inside int main()
int main(int argc, char *argv[])
{
...
...
std::vector<Point<double>> points;
calculate<double>::load_points(filepath, &points); //error shows in this line
for(const auto &p : points)
{
std::cout << p << std::endl;
}
...
...
...
return 0;
}
这种方法在普通的类实现中完全正常,但是一旦我尝试将它与模板一起使用,它就会显示以下错误:
error: cannot call member function
'bool calculate<T>::load_points(const string&, std::vector<Point<T>> *)
[with T = double; std::__cxx11::basic_string <char>]'
without object
为什么它适用于类但不适用于类模板?
答案 0 :(得分:1)
你不能这样称呼load_points
,因为它没有被宣布为static
,因此你需要一个你班级的实例。
例如你可以说
calculate<double> calc;
calc.load_points(filepath, &points);