【发布时间】:2013-12-11 10:56:47
【问题描述】:
我有一个正在处理的任务,所以我很犹豫是否在此处发布我的所有代码(因为我的教授可能会以某种方式找到它 - 政策是构成作弊)。
我的问题出在这个问题上:我有一个可视 C++ 程序,它有一个文本框,用户输入一个字符串,单击一个按钮,然后将该字符串添加到一个向量中。然后我需要通过其参数化构造函数将该向量(充满字符串)传递给新创建的对象。还涉及到一些继承。
基本上,在对象的 .h 文件和表单 .h 文件中,我有以下内容(根据老师希望它在我不允许更改的对象 .h 文件中的方式):
typedef vector<string> StringList;
然后我在表单的 .h 文件中创建一个新的父对象和一个新的向量:
private: Trial * t;
private: StringList * strings;
然后在表单的构造函数中初始化它:
strings = new StringList;
然后我尝试创建派生类的新实例并将其分配给父对象,同时传递所需的参数:
t = new Vector_Trial( strings, multi, type );
我在第一个括号下面看到一条红线:
Error: no instance of constructor "Vector_Trial::Vector_Trial" matches the argument list
argument types are:(StringList *, int, Trial::TrialType)
以下是父类和派生类的构造函数:
Trial ( StringList & s, int num_runs, TrialType t )
: strings(s), numRuns(num_runs), type(t) { }
Vector_Trial ( StringList & s, int num_runs, TrialType t ) : Trial ( s, num_runs, t ) {}
我假设我的问题与向量有关。有什么想法吗?
【问题讨论】:
-
为什么不直接将私有成员声明为“StringList 字符串”,然后放弃对
new的调用? -
只使用
StringList strings,不使用指针版本,然后在Vector_Trial构造函数中,您可以在输入StringList上调用swap方法来交换字符串。 -
不幸的是,当我这样做时,我收到错误:错误:托管类的成员不能属于非托管类类型
-
我似乎需要将 Vector_Trial 创建为“非托管类”,然后通过指针 (pimpl) 包装在“托管”类中。就我个人而言,我会避免使用 .NET 编译器,它会将这种废话添加到 C++ 中。见stackoverflow.com/questions/11588261/…