2014-01-10 5 views
0

작동하지 않습니다. boost 예제 코드 자체는 생성자로 초기화되는 벡터의 크기를 보여줍니다. 내가 대신부스트 벡터 크기 생성자는

ublas::vector<double> v(); 

같은 빈 생성자를 실행하면

g++ -std=c++11 -w -I/usr/local/Cellar/boost/1.55.0/include -L/usr/local/Cellar/boost/1.55.0/ -l -lboost_system -c -o point.o point.cc 
point.cc:38:29: error: expected parameter declarator 
ublas::vector<double> v(3); 
         ^
point.cc:38:29: error: expected ')' 
point.cc:38:28: note: to match this '(' 
ublas::vector<double> v(3); 

는 그것을 잘 실행됩니다. BOOST 예제 코드가 이렇게 생겼기 때문에 어딘가에서 실수를하고 있습니다.

#include <boost/numeric/ublas/vector.hpp> 
#include <boost/numeric/ublas/io.hpp> 

int main() { 
    using namespace boost::numeric::ublas; 
    vector<double> v (3); 
    for (unsigned i = 0; i < v.size(); ++ i) 
     v (i) = i; 
    std::cout << v << std::endl; 
} 

내가 만든 파일이나 뭔가 어딘가에 있다고 상상해 봅니다.

내 전체 메이크 파일은 다음과 같습니다

CXX=g++ 
CXXFLAGS=-std=c++11 -w -I/usr/local/Cellar/boost/1.55.0/include -L/usr/local/Cellar/boost/1.55.0/ -l -lboost_system 
BIN=orange 

SRC=$(wildcard *.cc) 
OBJ=$(SRC:%.cc=%.o) 

all: $(OBJ) 
    $(CXX) -o $(BIN) $^ 

%.o: %.c 
    $(CXX) [email protected] -c $< 

clean: 
    rm -f *.o 
    rm -f $(BIN) 

어떤 도움을 주시면 감사하겠습니다. 사전에
감사합니다,
최대

답변

2

선언 시점의 비 정적 데이터 멤버 초기화는 () 구문을 지원하지 않습니다.이 형식에서는 함수 선언과 혼동 될 수 있기 때문입니다. 그래서 당신이 너무 유효한 초기화이라고

class Point { 
    ublas::vector<double> v = ublas::vector<double>(3); 
}; 

주의가 필요합니다

class Point { 
    ublas::vector<double> v{3}; 
}; 

을하지만,이 벡터는 initialization_list를 사용하는 생성자가있는 경우, 그것은 하나를 가지고 v을 초기화 할 것이다 (같은 std::vector는 않습니다) 값이 3.0 인 요소

또는 C++ 03 스타일을 사용하고 생성자 초기화 목록에서 초기화 할 수 있습니다. 그러나이 경우 클래스는 더 이상 집계가 아닙니다. 이것은 문제 일 수도 있고 아닐 수도 있습니다. 예 :

또한
class Point { 
public: 
    Point() : v(3) {} 
private: 
    ublas::vector<double> v; 
}; 

, 후행 ; 있습니다.

+0

요소 값은 '3.0'이 아닌'1.0'이됩니다. – Yakk

+0

@ 감사합니다! 결정된. – juanchopanza

2

당신이 클래스의 멤버 변수를 선언 때문입니다.

class Point { 
    ublas::vector<double> v; 

    Point() : v(3) {} 
}; 

은 또한 당신이

ublas::vector<double> v(); 

을 할 때 인수를 취하지 않고 벡터를 반환하는 함수 v를 선언 참고 : 즉, 생성자의 초기화 목록에서 변수를 초기화하는 것을 의미합니다.

+0

최소 _mention_ [Most Vexing Parse] (http://en.wikipedia.org/wiki/Most_vexing_parse) – sehe