2014-07-08 1 views
2

두 개의 행렬을 요소별로 비교하고 해당 위치의 요소가 일치하는 경우 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

을 여기서 내가 뭘 잘못하고 있니?

답변

1

누구나 이것을 중복으로 표시 한 사람은 누구나 옳았습니다. C++ template 키워드를 완전히 이해하지 못했기 때문에 문제가 발생합니다.

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; 
} 
:

Where and why do I have to put the "template" and "typename" keywords?

다음 문제를 해결하는 기능 장착