C ++:用户定义类的动态数组

时间:2013-03-10 07:09:30

标签: c++

我试过这个:

int n;
cin >> n;
int * pn = new int[n];

然后我可以使用这个数组:pn [i] = ...

但我想在自己的课堂上组织一些类似的事情:

class MyString
{
    char* m_pStr;
    public:
    MyString(const char* pStr){ 
        this->CreateArray(pStr);
        strcpy(m_pStr, pStr);
    }
}

void main(){
    int N;
    cout << "Iinput N: ";
    cin >> N;
    MyString * ar = new MyString[N];

    char tmp[100];
    for (int i = 0; i < 4; i++){
        cout <<"Input the string for the Mystring " << i + 1 << " ";
        cin >> tmp;     
        ar[i] = MyString(tmp);
    }
}

我得到:错误C2512:'MyString':没有合适的默认构造函数。

2 个答案:

答案 0 :(得分:0)

您正尝试使用默认构造函数实例化MyString类,而没有在此行中定义一个:

MyString * ar = new MyString[N];

它必须初始化对象,因此将尝试使用未设置的默认构造函数。

我个人会改变你的构造函数:

MyString(const char* pStr);

为:

MyString(const char* pStr = "");

以便像默认一样行事。

答案 1 :(得分:0)

您忘记包含默认构造函数

MyString() : m_pStr(0) { }

当您尝试从此处实例化MyStrings数组时发生错误:

MyString * ar = new MyString[N];

查找默认构造函数。由于您没有在类定义中定义一个,因此您收到了所描述的错误。

因此,要解决您的问题,请为您的类创建默认构造函数,并且所有内容都应该按原样进行编译。

有关更多详细信息,请参阅此链接(或阅读某些C ++):

http://en.wikipedia.org/wiki/Default_constructor