运行Container类程序时显示错误

时间:2015-07-28 21:09:13

标签: c++

Garden包含 n 苹果树。每棵苹果树的特征如下:第一年的收获,每年的收获,以及每年苹果数量增加的规律。法律使用两个系数coef1coef2。所有苹果树的法律都很常见,但系数可能不同。你必须:
a)找出每年苹果树种植的苹果数量。年数 从键盘输入或定义为常量值;
b)找出特定年份每棵苹果树的成长苹果数量;
c)在苹果树上形成新的花园,这些苹果树在多年的时间里增加了苹果的数量 不低于定义的值。苹果数量和年数的值可以是 定义为常量或输入键盘形式 这只是一个初始部分并给出错误:

  

警告3警告C4183:'打印':缺少返回类型;假设是一个成员函数返回' int' c:\ users \ kumar anubhav \ documents \ garden \ atree.h 11 1 garden

     

警告6警告C4183:'打印':缺少返回类型;假设是一个成员函数返回' int' c:\ users \ kumar anubhav \ documents \ garden \ atree.h 11 1 garden       9智能感知:没有操作员"<<&#;匹配这些操作数               操作数类型是:std :: ostream<< std :: string c:\ Users \ kumar anubhav \ Documents \ garden \ Source.cpp 42 6 garden

     

错误2错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ kumar anubhav \ documents \ garden \ atree.h 11 1 garden

     

错误5错误C4430:缺少类型说明符 - 假定为int。注意:C ++不支持default-int c:\ users \ kumar anubhav \ documents \ garden \ atree.h 11 1 garden

     

错误7错误C2556:' std :: string Atree :: Print(void)' :重载函数的区别仅在于来自' int Atree :: Print(void)' c:\ users \ kumar anubhav \ documents \ garden \ atree.cpp 9 1 garden

     

错误8错误C2371:' Atree :: Print' :重新定义;不同的基本类型c:\ users \ kumar anubhav \ documents \ garden \ atree.cpp 9 1 garden

     

错误1错误C2146:语法错误:缺少&#39 ;;'在标识符之前'打印' c:\ users \ kumar anubhav \ documents \ garden \ atree.h 11 1 garden

     

错误4错误C2146:语法错误:缺少&#39 ;;'在标识符之前'打印' c:\ users \ kumar anubhav \ documents \ garden \ atree.h 11 1 garden

class Atree
{
private:
int year, increa;
int coef1, coef2;
 public:
Atree(): year(0), increa(16), coef1(1), coef2(2) { }
Atree(int year, int increa, int coef1, int coef2):
 year(year), increa(increa), coef1(coef1), coef2(coef2) { }
 string Print();
};


#include "Atree.h"
 #include <sstream>
 #include <iomanip>
 using namespace std;
//------------------------------------------------------------
 // Writes data into a line
 string Atree::Print()
 {
stringstream sr;
sr << setw(6) << coef1 << setw(6) << coef2
 << setw(5) << year << setw(7) << increa ;
return sr.str();
 }
#pragma once
//------------------------------------------------------------
#include "Atree.h"
class Garden
{
public:
static const int CMaxi = 100;
 private:
Atree Atrees[CMaxi];
int n;
 public:
Garden():n(0) { }
Atree Get(int i) { return Atrees[i]; }
int Get() { return n; }
void Set(Atree ob) { Atrees[n++] = ob; }
};
//------------------------------------------------------------
#include "Garden.h"
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;
//------------------------------------------------------------
const char Cu1[]="U1.txt";
//------------------------------------------------------------
void Read(Garden & Gard, const char fv []);
void Print(Garden & Gard);
//------------------------------------------------------------
int main()
{
 Garden Gard;
 Read(Gard, Cu1);
 Print(Gard);
 return 0;
}
//------------------------------------------------------------
// Reads data from the file fv
void Read(Garden & Gard, const char fv [])
{
    ifstream fd(fv);
 int n;
 fd >> n;
 int coef1, coef2, year, increa;
 for (int i = 0; i < n; i++) {
 fd >> coef1 >> coef2 >> year >> increa;
 Gard.Set(Atree(year, increa, coef1, coef2));
 }
 fd.close();
 }
//------------------------------------------------------------
// Prints the data of object Gard
 void Print(Garden & Gard)
 {
 cout << " Information on apple trees\n";
 cout << " Coef1 coef2 year increa\n";
 for (int i = 0; i < Gard.Get(); i++)
cout << Gard.Get(i).Print() << endl;
}
//------------------------------------------------------------

1 个答案:

答案 0 :(得分:1)

11的声明中,您声明了一个名为Atree的方法,该方法返回Print。编译器不知道string是什么,与语言C不同,它不能将返回类型默认为string。您可能意味着使用int,因此写道:

std::string

您可能需要事先class Atree { std::string Print(); };

编译器也在抱怨,因为#include <string>的返回类型的定义不同。在此,它知道您正在尝试使用Atree::Print,因为您已使用std::string关键字将std命名空间置于上下文中:

using

编译器知道您希望返回using namespace std; string Atree::Print() { } ,但这与std::string声明不同,编译器假定您尝试返回Atree::Print

你应该避免int。这样做只会给你一些关于编译器的错误,而不知道using namespace std是什么(希望)会使它更容易解决。