c++/cli windows窗体在vs2012中,对象数组是不可能的



我必须使用Visual Studio 2012表单创建一个小型gui项目,主要问题是:我无法为我的生活创建一系列对象,甚至连同学们的项目都无法运行。

array<className^>^ arrayName = gcnew array<className^>(100);

或者在我的情况下:

array<kind^> ^testArray = gcnew array<kind^>(100);

应该起作用。应该这个错误有点像

错误:数据成员初始值设定项不允许

它适用于其他人,但在vs2012中不知何故不适用于我,尽管它完全相同。不要得到我所缺少的。

我创建的一个类的快速而肮脏的例子:

ref class memberino {
private:
    String^ memVar;
public:
    memberino(){};
    memberino(String^ memVar_);
    String^ getMemVar() { return memVar; }
    void setMemVar(String^ memVar_) { this->memVar = memVar_; }
};
ref class baseClass abstract {
private:
    String^ baseVar;
    memberino M;
public:
    baseClass(){};
    baseClass(String^ baseVar_, String^ memVar_);
    virtual String^ getMemVar() { return M.getMemVar(); }
    virtual String^ getBaseVar() { return baseVar; }
    virtual void setBaseVar(String^ baseVar_) { this->baseVar = baseVar_; }
    virtual String^ getChildVar() = 0;
};
ref class kind: public baseClass {
private:
    String^ childVar;
public:
    kind(){};
    kind(String^ baseVar_, String^ memVar_, String^ childVar_);
    virtual String^ getChildVar() override { return childVar; }
    virtual void setChildVar(String^ childVar_) { this->childVar = childVar_; }
};

和类.cpp:

memberino::memberino(String^ memVar_){
    this->setMemVar(memVar_);
}
baseClass::baseClass(String^ baseVar_, String^ memVar_):M(memVar_){
    this->setBaseVar(baseVar_);
}
kind::kind(String^ baseVar_, String^ memVar_, String^ childVar_):
baseClass(baseVar_, memVar_){
    this->setChildVar(childVar_);
}

在MyForm.h中,我只是尝试创建一个数组,比如:

array<kind^> ^testArray = gcnew array<kind^>(100);

在尝试运行它之前,它是红色下划线,上面提到了错误。编译它会给出以下输出:

警告C4677:";testArray":非私有成员的签名包括私有程序集类型";善良";。

错误C3845:";pr5temp::MyForm::testArray":只有静态数据成员才能在引用类或值类型中初始化

不是100%,因为它是从德语翻译成英语的,但如果它有帮助的话:

警告C4677:";testArray":私人议员签名;善良";。

错误C3845:";pr5temp::MyForm::testArray":Nur statische Datenmember können innhalb einer Verweisklasse or eines Wettyps initializer werden。

您应该初始化构造函数中的字段。

    ...
        private:
            System::ComponentModel::Container ^components;
            array<kind^> ^testArray;
    ...
    public ref class MyForm : public System::Windows::Forms::Form
    {
    public:
        MyForm(void)
        {
            InitializeComponent();
            testArray= gcnew array<kind^>(100);
        }
    ...

或者确实使其成为静态

static array<kind^> ^testArray = gcnew array<kind^>(100);

但请记住,数组中的元素尚未初始化。

最新更新