2016-11-07 132 views
-1

我想以這種方式來使用數組:如何初始化數組的指針爲字符串構造

class Foo { 
    std::string *arrayOfPointersToString[]; // Array of pointers to string 
    int N; 
public: 
    Foo(int capacity) : N(capacity) { 
     arrayOfPointersToString = new std::string[capacity]; 
    } 
}; 

但我有一個錯誤:不兼容的指針類型。我能做什麼?如果你想字符串指針的動態分配的數組,一個可能的解決方案

std::string *stringArray = new std::string[5]; 

但是,:

+1

爲什麼不使用'的std :: VECTOR'? – NathanOliver

+1

'arrayOfPointersToString = new std :: string * [capacity];' –

+0

它是賦值的一部分... – multiplayer1080

回答

3

不知道你爲什麼要動態分配一個字符串數組的原因太多了,你會使用這個是改爲使用這樣的:

class foo{ 
    std::string ** arrayOfStringPointersToString; 
public: 
    foo(int capacity) : N(capacity) { 
     arrayOfPointersToString = new std::string*[capacity]; 
    } 
} 

需要注意的關鍵一點是,各指標的值不存在保證爲空,所以每一個索引,你要麼需要

  1. 對他們每個人打電話new並分配他們的價值觀。

  2. 將它們分配給另一個變量的地址。

此外,因爲您將自己管理的動態內存,記得打電話delete你用new分配的一切,並確保你在你new[]分配一切來電delete[]

+0

一個很好的動態內存資源是: http://www.cplusplus.com/doc/tutorial/dynamic/ – Eddge

1

不兼容性錯誤是因爲您已聲明該數組保持指針,但是然後嘗試分配實際std::string對象的數組而不是指針數組。

如果你想要一個指針數組,你需要修復您的new[]語句來分配數組的指針,而不是對象的數組的:

class Foo { 
    std::string* arrayOfPointersToStrings[]; 
    int N; 
public: 
    Foo(int capacity) : N(capacity) { 
     arrayOfPointersToStrings = new std::string*[capacity]; 
    } 
    ~Foo() { 
     delete[] arrayOfPointersToStrings; 
    } 
}; 

但是,如果你想對象的數組,你需要修復您的數組聲明中聲明的對象,而不是指針數組的數組:

class Foo { 
    std::string* arrayOfStrings; 
    int N; 
public: 
    Foo(int capacity) : N(capacity) { 
     arrayOfStrings = new std::string[capacity]; 
    } 
    ~Foo() { 
     delete[] arrayOfStrings; 
    } 
}; 

無論哪種方式,你應該使用std::vector而不是使用手動new[]/delete[]

class Foo { 
    std::vector<std::string*> arrayOfPointersToStrings; 
public: 
    Foo(int capacity) : arrayOfPointersToStrings(capacity) {} 
}; 

class Foo { 
    std::vector<std::string> arrayOfStrings; 
public: 
    Foo(int capacity) : arrayOfStrings(capacity) {} 
};