不能宣布类在另一类

不能宣布类在另一类

问题描述:

#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; 
} 
+0

什么是错误讯息? – 2012-02-19 19:07:52

你有两个问题。

  1. 正如其他人所说,反向所以库存被组合之前充分定义的类声明的顺序。
  2. 您需要定义一个适当的默认构造函数,以便股票可以通过Stock stocks[100]

被实例化解决第二个你需要的东西是这样的:

class Stock { 

    public: 

     Stock() {}; // Could add suitable defaults here. 

    // Whatever else.... 

} 

您需要声明类Stock第一,Portfolio声明之前。

成员Stock stocks[100];代表一个Stock对象的数组,因此该类的完整实现必须知道Portfolio,事实并非如此。移动声明,它应该工作。

+0

除了股票没有合适的构造函数,所以它仍然会失败。 – talonmies 2012-02-19 19:13:34

+0

它只是说“没有匹配函数调用Stock :: Stock()” – Monkeyanator 2012-02-19 19:20:49

+1

@Monkeyanator定义了一个默认构造函数。如果为类定义构造函数,则不会生成默认构造函数。 – 2012-02-19 19:28:17

类别Stocks应该定义之前Portfolio之一。否则,使用时将不确定。

+0

它只是说“没有匹配函数调用Stock :: Stock()” – Monkeyanator 2012-02-19 19:18:43

+0

啊,这是因为'Stock'类没有默认的构造函数。所以你不能声明这种类型的成员数组。你应该添加一个默认构造函数到'股票'。或者可能考虑将'stocks'成员更改为一个指针数组或一个'std :: vector'或类似的东西。 – rodrigo 2012-02-19 19:23:37