尝试编写模板函数时,我不断收到以下错误:
main.cpp|17|error: no matching function for call to ‘dotproduct(vector<float, 3u>&, vector<float, 3u>&)’|
我搜索了错误并发现了其他一些情况,如果参数是浮点数或双精度数,非类型模板参数可能会出现问题。我使用非类型模板参数size_t
来确定矩阵和向量的大小。
我有以下课程:
矩阵:
template<class element_t, size_t rows, size_t columns>
class matrix
{
private:
element_t elements_[rows*columns];
// ...
};
向量:
template<class element_t, size_t size>
class vector
: public matrix<element_t, size, 1>
{
//...
};
我的功能:
template<class vector_t>
typename vector_t::element_t dotproduct(const vector_t &vector0, const vector_t &vector1)
{
typename vector_t::element_t result_(0);
for(size_t index_ = 0; index_ < vector_t::rows * vector_t::colums; ++index_){
result_ += vector0[index_] * vector1[index_];
}
return result_;
}
调用自:
int main(int count, char *arguments[])
{
typedef vector<float, 3> vec3;
vec3 a = {1.0f, 2.0f, 3.0f}, b = {3.0f, 2.0f, 1.0f};
std::cout << dotproduct(a, b) << std::endl;
std::cin.get();
}
gcc 版本 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)