2014-12-06 2 views
0

그래서 테스트하려고 시도하는 코드 조각이 있습니다. 이 코드는 몇 가지 벡터 (구조체의 요소)가 특정 지점의 알려진 벡터와 동일하다는 것을 확인하지만 문제가 발생합니다. 나는 다음과 같이 알려진 벡터에브레이스 동봉 초기 목록? 벡터로 변환

assert((class1.getattr().getattr().getVec(key) == {4,3,2,2})) 

를 벡터를 비교하려고 할 때 나는 다음과 같은 오류 얻을 :

assertAll.cpp:105:82: error: could not convert ‘{4,3,2,2}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<int>’ 

은 어설의 LVAL는 코드의 나머지 부분이 모두 정확하고, 확실히 벡터이어야합니다. 나는 플래그로 컴파일 중이다. -std = C++ 11 -Wall -Wextra -pedantic -O g ++. 아무도이 문제를 해결하는 방법을 알고 있습니까? 괄호로 묶은 이니셜 라이저 목록을 벡터로 유형 변환하는 방법이 있습니까? 아니면이 방법을 사용하는 것이 더 좋습니까? 내가 비슷한 때 흥미롭게

+0

벡터 요소를 요소별로 비교 한 다음 bool 값을 반환하는 작은 함수를 작성하여 assert를 사용하여 검사하거나 std :: equal을 사용할 수 있습니다. – learningToCode

+0

문제는 cpp가 대괄호로 묶은 정보를 벡터로 인식하지 못하므로 std :: vector를 사용하는 함수가 작동하지 않는다는 것입니다. – Eric

+0

우리의 첫 번째 생각은 비교 함수에 전달하는 것이었지만 입력 할 수 없기 때문에 두 번째 부분을 벡터 으로 캐스팅했는데 분명히 작동하지 않았습니다. – Eric

답변

1

Does anybody know how to fix this? Is there a way to typecast the bracket enclosed initializer list to a vector

, 나는 연타 3.5 GCC 4.9.2에 완전히 다른 오류가 발생하지만, 당신은 단지 장소 벡터 (아주없는 타입 캐스팅을 구축하기 위해 초기화리스트 구문을 사용할 수 있습니다) 추측 :

assert((class1.getattr().getattr().getVec(key) == std::vector<int>{4,3,2,2})) 

을 당신이 Coliru과 같은에서 코드를 실행할 수있는 일을하는 방법을 잘 모르겠지만, 다음 코드는 g++ -std=c++11 -Wall -pedantic

#include <cassert> 
#include <vector> 

std::vector<int> foo() { 
    return {1,2,3,4}; 
} 

template<class T> 
bool is_equal(const T& a, const T& b) { 
    return a == b; 
} 

int main() 
{ 
    assert((foo() == std::vector<int>{1,2,3,4})); 

    assert(is_equal(foo(), {1,2,3,4})); 

    assert([&](std::vector<int> v) -> bool { 
     return foo() == v; 
    }({1,2,3,4})); 
} 
사용하여 GCC 4.9.2에 나를 위해 작동

옳은 마음의 아무도 람다를 사용하지 않을 것이지만, 예제를 통해 알 수 있듯이 기본적으로 컴파일러에게 변환을 위해 두면이 같은 유형이라는 것을 알 필요가 있습니다 벡터에 이니셜 라이저 목록.

+0

이 문제를 해결하지 못하고 또한 시도했습니다. – Eric