2014-10-11 95 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 ++開不接受這個代碼是正確的,這裏就是它的說法:

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) { 
^

這是什麼說話關於?什麼收斂? Soorry,但我看不到任何轉換!我究竟做錯了什麼??

+0

循環你到C++後另一種語言?看起來你正在用C++進行ruby-ish的事情。 – 2014-10-11 18:03:36

+0

@JohnDibling我不知道紅寶石,但我編寫了一些關於PHP和javaScript – dKab 2014-10-11 19:12:32

回答

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

應該

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

或者乾脆

arr[i] = new Set(i); 

,你可能要開始i = 0

+0

,但爲什麼?我錯過了新的Set(i)默認情況下是否已經返回指向對象的指針? – dKab 2014-10-11 17:50:12

+0

@dKab是的,'new'在你的情況下返回一個非空指針''s''不是一個指針。 – P0W 2014-10-11 17:54:07

+0

我應該知道這一點,是的,我知道循環通常從0開始,但在這種情況下,有理由從1開始 – dKab 2014-10-11 19:15:00