2014-10-11 2 views
-1

이 간단한 코드가 컴파일되지 않는 이유는 무엇입니까? 내가하려는 것은 Set 타입의 객체에 대한 포인터의 배열을 만드는 것이다.프로그램이 컴파일되지 않는 이유는 무엇입니까?

int main() 
{ 
    size_t n = 0; 
    size_t ops = 0; 
    cin >> n >> ops; 
    Set ** arr = new Set*[n+1]; 
    for (size_t i = 1; i< n+1; ++i) { 
     Set s = new Set(i); 
     arr[i] = &s; 
    } 

내 설정 유형 정의가 위 :

struct Set 
{ 
    Set (size_t x) { 
     this->p = x; 
     this->rank = 0; 
     this->index = x; 
} 

    size_t index; 
    size_t p; 
    size_t rank; 
}; 

그러나 g ++ does't 여기로 정확하고이 코드를 것 받아 들일 때 무엇을 말 : 그것은 이야기 무엇

dss.cpp: In function ‘int main()’: 

dss.cpp:57:20: error: invalid conversion from ‘Set*’ to ‘size_t {aka long unsigned int}’ [-fpermissive] 
    Set s = new Set(i); 
        ^

dss.cpp:17:2: error: initializing argument 1 of ‘Set::Set(size_t)’ [-fpermissive] 
    Set (size_t x) { 
^

을 약? 무슨 변환? 죄송합니다, 그러나 나는 어떤 개종도 볼 수 없습니다! 내가 도대체 ​​뭘 잘못하고있는 겁니까??

+0

i = 0에서 루프를 시작하려면? C++에서 루비 같은 것을하고있는 것처럼 보입니다. –

+0

@JohnDibling 나는 루비를 모른다. 그러나 나는 PHP와 자바 스크립트에 프로그래밍을했다. – dKab

답변

3
Set s = new Set(i); 
arr[i] = &s; 

Set *s = new Set(i); 
arr[i] = s; 

하거나

arr[i] = new Set(i); 

해야하며, 당신은 아마 다른 언어 후에 C++에 왔는가

+0

하지만 왜? 그 새로운 Set (i)가 이미 객체에 대한 포인터를 기본적으로 반환하는 것을 놓쳤습니까? – dKab

+0

@dKab 네,'new'는 당신의 케이스에 널이 아닌 포인터를 리턴합니다.''s''은 포인터가 아닙니다. – P0W

+0

나는 그 사실을 알고 있었음에 틀림없지 만, 보통 루프는 0부터 시작하지만,이 경우에는 1에서 시작하는 이유가 있음을 알고있다. – dKab

관련 문제