不能宣布类在另一类
#include <cstdlib>
#include <iostream>
#include <string>
#include <string.h>
using namespace std;
class Portfolio{
public :
Portfolio(){};
private:
Stock stocks[100];
void load_self(){}
void save_self(){}
};
class Stock {
public:
Stock(int val , int amo , string db , string symbol){
this->set_value(val);
this->set_amount(amo);
this->set_date(db);
this->set_symbol(symbol);
}
void set_value(int vlue){this->value=vlue;}
void set_amount(int am){this->amount=am;}
void set_date(string d){this->date_bought = d;}
void set_symbol(string symb){this->symbol = symb;}
private:
int value;
int amount;
string date_bought;
string symbol;
};
int main(int argc, char *argv[])
{
return EXIT_SUCCESS;
}
你有两个问题。
- 正如其他人所说,反向所以库存被组合之前充分定义的类声明的顺序。
- 您需要定义一个适当的默认构造函数,以便股票可以通过
Stock stocks[100]
被实例化解决第二个你需要的东西是这样的:
class Stock {
public:
Stock() {}; // Could add suitable defaults here.
// Whatever else....
}
您需要声明类Stock
第一,Portfolio
声明之前。
成员Stock stocks[100];
代表一个Stock
对象的数组,因此该类的完整实现必须知道Portfolio
,事实并非如此。移动声明,它应该工作。
除了股票没有合适的构造函数,所以它仍然会失败。 – talonmies 2012-02-19 19:13:34
它只是说“没有匹配函数调用Stock :: Stock()” – Monkeyanator 2012-02-19 19:20:49
@Monkeyanator定义了一个默认构造函数。如果为类定义构造函数,则不会生成默认构造函数。 – 2012-02-19 19:28:17
类别Stocks
应该定义之前Portfolio
之一。否则,使用时将不确定。
它只是说“没有匹配函数调用Stock :: Stock()” – Monkeyanator 2012-02-19 19:18:43
啊,这是因为'Stock'类没有默认的构造函数。所以你不能声明这种类型的成员数组。你应该添加一个默认构造函数到'股票'。或者可能考虑将'stocks'成员更改为一个指针数组或一个'std :: vector'或类似的东西。 – rodrigo 2012-02-19 19:23:37
什么是错误讯息? – 2012-02-19 19:07:52