2010-07-11 7 views
1

좋아, 나는 vb.net에서 C++로 갈거야. 구조에서 벡터를 사용하려고 시도하지만 컴파일러가 내게 그것을 위해 소리를 지른다. 현재 성명서에 무엇이 잘못 되었습니까?구조체에 C++ 벡터를 사용하는 데 문제가 있습니까?

#include <vector> 

struct FactorSet 
{ 
vector<long long> UpperFactor(0); 
vector<long long> LowerFactor(0); 
}; 

출력 오류 (비주얼 스튜디오 2008) :

오류 1 오류 C2059 : 구문 오류 : 나는 그것을 추측 벤처 '상수'

는 벡터가 정말 무엇인지 이해 나의 부족 . 내 마음 속에서 그것은 대상이라고 할 수 있습니다. 문자열과 같은 다른 객체는 문제가없는 것 같습니다. 또한 구조와 클래스가 매우 비슷하기 때문에 클래스 정의로 확장한다고 가정합니다.

+6

"다른 언어를 사용해서는 안됩니다." 책을 사서 처음부터 배우고 다른 언어의 지식을 적용하면 문제가 생깁니다. http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – GManNickG

+0

당신은 선생님입니다. 그리고 실제로 제가하고있는 일입니다. 현재 Herbert Schildt의 'C++, The Complete Reference 4th Edition'을 필자의 참고 자료로 사용하고 있습니다. 때로는 내가 직면 한 문제와 같은 작은 세부 사항은 이러한 근본적인 책에서 다루어지지 않습니다. 결국 나는 더 많은 독해력으로 답을 찾았을 것입니다. 그러나 의미 론적으로, 객체 지향적이며 절차 적으로 생각하는 학교는 언어에서 언어로 전달 될 수 있습니다. –

+3

아니요, 제발,하지 Schildt. 일반적으로 C++ (및 C)에 관한 책의 최악의 저자로 생각됩니다. GMan이 제공 한 목록에서 Accelerated C++가 갈 방법입니다. –

답변

6

당신이 원하는 :

#include <vector> 

struct FactorSet 
{ 
std::vector<long long> UpperFactor; 
std::vector<long long> LowerFactor; 
}; 

당신은 또한 오래 오래 문제가있을 수 있지만, 이것은 현재 ++ C의 일부가 아닙니다있다. 실제로 벡터에 크기를 부여하려면

, 당신이해야 할 그 구조체 생성자를 통해 : F에

FactorSet f; 

벡터 : 그래서 지금 당신이 말할 때

struct FactorSet 
{ 
std::vector<long long> UpperFactor; 
std::vector<long long> LowerFactor; 

FactorSet() : UpperFactor(42), LowerFactor(42) {} 
}; 

둘 다 크기가 42가됩니다.

벡터가 실제로 무엇인지에 관해서는 벡터의 경우를 제외하고는 문자열과 매우 비슷한 클래스입니다.

string s; 
+0

와우, 빨리 끝났습니다. 선언문에서 길이가 0으로 초기화하려고했기 때문에 상수로 취급되고 구조체와 클래스가 C++에서 그다지 좋아하지 않는다고 가정합니다. 네일 고마워! –

2

예, 당신은 구조체 또는 클래스에 벡터를 사용할 수 있습니다 : 그래서

vector <char> s; 

은 매우 유사합니다 (그러나 동일)입니다. 문제는 C++에서 멤버를 인라인으로 초기화 할 수 없다는 것입니다. 당신은 생성자에서 초기화를 할 필요가있다. 예를 들어 : 명시 적으로 (사실, 이렇게하면 약간 느려질 수 있습니다 그런 식으로 구성하는 모든 necesary되지 않도록 '

class FactorSet { 
    public: 
     FactorSet() : UpperFactor(0), LowerFactor(0) {} 
     // ... 
    private: 
     std::vector<int64_t> UpperFactor; 
     std::vector<int64_t> LowerFactor; 
}; 

그냥 몇 가지 의견을 ... 벡터는 기본적으로 제로 요소로 구성됩니다 그냥 기본 생성자를 사용하는 것보다). 또한 유형 long long은 현재 비표준입니다. int64_tstdint.h에 정의하고 (더 이동 가능하게는 헤더 boost/cstdint.hpp에 정의 됨) 사용하는 것이 좋습니다.

+0

그 클래스 예제도 가져 주셔서 감사합니다! –

+0

'int64_t'와'stdint.h'는'long long'의 표준이 아닙니다. –

+0

@ 마이크, 그렇습니다. 그것들은 IEEE Std. 1003.1 POSIX, OpenGroup 기본 사양/단일 UNIX 사양 및 ISO C99 표준을 준수합니다. Windows는 세 가지 표준 모두를 준수하지 않기 때문에 (이 문제를 해결하는 를 사용하는 것이 좋습니다.) –

관련 문제