我想按元素比较两个矩阵,如果该位置的元素匹配,则返回一个包含1
的矩阵,否则返回0
。我创建了一个简单的测试函数来执行此操作:
template <class A, class B>
void func(const A& a, const B& b)
{
auto c = (b.array() == a.array()).cast<int>();
std::cout << c;
}
所以我写了一个
main
函数来测试它:int main()
{
Eigen::Array<int,Eigen::Dynamic,Eigen::Dynamic> b;
b.resize(2,2);
b.fill(2);
auto a = b;
a(0,0) = 1;
a(0,1) = 2;
a(1,0) = 3;
a(1,1) = 4;
func(a,b);
return 0;
}
但我不断收到此错误:
eigenOperations.cpp: In function ‘void func(const A&, const B&)’: eigenOperations.cpp:8:24: error: expected primary-expression before ‘int’ auto c = temp.cast<int>(); eigenOperations.cpp:8:24: error: expected ‘,’ or ‘;’ before ‘int’ make: *** [eigenOperations] Error 1
我在这里做错了什么?
最佳答案
将此标记为重复的人是正确的。因为我不完全理解C++ template
关键字,所以确实出现了问题。
Where and why do I have to put the "template" and "typename" keywords?
用以下内容替换功能可解决此问题:
template <class A, class B>
void func(const A& a, const B& b)
{
auto c = (b.array() == a.array()).template cast<int>();
std::cout << c;
}