2014-10-11 96 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