如何初始化数组的指针为字符串构造

问题描述:

我想以这种方式来使用数组:如何初始化数组的指针为字符串构造

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

不知道你为什么要动态分配一个字符串数组的原因太多了,你会使用这个是改为使用这样的:

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

不兼容性错误是因为您已声明该数组保持指针,但是然后尝试分配实际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) {} 
};