2011-09-09 5 views
2

값을 할당하기 전에 내가 선언에도 불구하고 오류 "형식의 이름을하지 않는다"바로 나는 다음과 같은 코드를 아래로 내 문제를 슬림화 한

#include <iostream> 

using namespace std; 

struct hello 
{ 
    int array[4]; 
    array[0] = 1; 
    array[1] = 2; 
    array[2] = 3; 
    array[3] = 4; 
}; 

와 나는이를 컴파일 할 때 난 여전히 '배열이하는 수 이름을 지정하지 않는 '오류가 발생합니다. AFAIK이 오류는 할당 바로 위에 배열을 선언하더라도 변수가 선언 된 경우에 발생합니다.

답변

6

할당 문장 배열 등 [0] = 0; 구조체 정의, 함수, 생성자 또는 이와 유사한 코드의 실행 블록에 들어갈 필요가 없습니다.

struct hello 
{ 
    int array[4]; 
    hello(){ 
     array[0] = 1; 
     array[1] = 2; 
     array[2] = 3; 
     array[3] = 4; 
    } 
}; 
+0

나는 확실히 생성자와 구조에 대한 이의가있는 것에 대해 이의를 제기합니다. C++에서 구조체에는 때때로 생성자가 있어야합니다 (구조체/클래스에는없는 기능이 있지만). –

+0

@Jan, 나는 동의 할 것이다. "물론 구조체에 생성자를 제공하는 것에 반대 할 수도 있지만 다른 주제가 있습니다." –

2

내부에 있지 않고 구조체 정의 바깥에 값을 할당해야합니다.

#include <iostream> 

struct hello 
{ 
    int array[4]; 
}; 

int main() 
{ 
    hello h; 
    h.array[0] = 1; 
    h.array[1] = 2; 
    h.array[2] = 3; 
    h.array[3] = 4; 

    // do stuff 

    return 0; 
} 
+0

감사합니다, 내가 구조체의 목적을 오해 한 것 같아요. – Archimedes

0

C++에서 이와 같이 배열을 초기화 할 수 없습니다. 여러 가지 방법으로이 문제를 해결 있습니다

1) 생성자 (이 같은 값으로 hello의 모든 인스턴스를 초기화합니다) 만들기 :

struct hello { 

    int array[4]; 

    hello() { 
     array[0] = 1; 
     array[1] = 2; 
     array[2] = 3; 
     array[3] = 4; 
    } 
}; 

hello h; 

2) 관련 값 hello의 각 인스턴스를 초기화를 (다른는 인스턴스)는 서로 다른 값을 가질 수 있습니다 : 여기

struct hello 
{ 
    int array[4]; 
}; 

hello h = {{1,2,3,4}}; 
0

그리고 정적 변수와 또 다른 가능성을, 당신의 의도가 명확하게 언급되지 않는 :

struct hello 
{ 
    static int array[4]; 
}; 

int hello::array[4]; 

int main() 
{ 
    hello::array[0] = 1; 

    return 0; 
} 
관련 문제