2012-06-27 154 views
1

你好,我在我的代码中调用了void initialize()函数有问题。我应该得到那个看起来像这样调用void函数问题

//cccccccccccccccccccccccccc 
    cxxxxxxxxxxxxxxxxxxxxxxxxc 
    cxxxxxxxxxxxxxxxxxxxxxxxxc 
    cxxxxxxxxxxxxxxxxxxxxxxxxc 
    cxxxxxxxxxxxxxxxxxxxxxxxxc 
    cxxxxhhhhhhhxxxxxxxxxxxxxc 
    cxxxxhhhhhhhxxxxxxxxxxxxxc 
    cxxxxhhhhhhhxxxxxxxxxxxxxc 
    cxxxxhhhhhhhxxxxxxxxxxxxxc 
    cxxxxxxxxxxxxxxxxxxxxxxxxc 
    cccccccccccccccccccccccccc// 

,其中阵列在初始化(定义的数组)和变量来自FIN,SteamPipe和GridPT类。我的代码给了我数组前的第一组答案,但是当它到达数组时,我只能得到符号'?'。这就是它在GridPT类中所指定的内容。 我认为我调用void函数的方式是错误的或者传递变量时出现错误?我已经尝试拿出const,但仍然是一样的。 这里是我的代码.h文件中

#include<iostream> 
#include<istream> 
#include<cmath> 
#include<cstdlib> 

using namespace std; 

const int maxFinHeight = 100; 
const int maxFinWidth = 100; 

class Steampipe 
{ 
private: 
    int height, width; 
    double steamTemp; 

public: 
    Steampipe (int H = 0, int W = 0, double sT = 0.0) 
    { 
    height = H; 
    width = W; 
    steamTemp = sT; 
    } 

    // Access function definitions 
    int getWidth()const{return width;}; 
    int getHeight()const{return height;}; 
    double getSteamTemp()const{return steamTemp;}; 
    void setWidth(int dummysteamwidth) {width = dummysteamwidth;}; 
    void setHeight(int dummysteamheight){height = dummysteamheight;}; 
    void setSteamTemp(double dummysteamtemp){steamTemp = dummysteamtemp;}; 

    // Access function definitions 
    friend istream& operator>>(istream& , Steampipe&); // YOU MUST DEFINE 
    friend ostream& operator<<(ostream& , const Steampipe&); // YOU MUST DEFINE 
}; 

class GridPt 
{ 
private: 
    double temperature; 
    char symbol; 

public: 
    GridPt(double t = 0.0, char s = '?') 
    { 
    temperature = t; 
    symbol = s; 
    } 

    // Access function definitions 
    double getTemperature()const {return temperature;}; 
    char getsymbol() const {return symbol;}; 

    void setTemperature (double T=0) {T=temperature;} 
    void setsymbol (char S='?'){S=symbol;} 
}; 

class Fin 
{ 
private: 
    int width, height; //width and height of fin 
    int pipeLocationX, pipeLocationY; //grid location of lower left corner of steampipe 
    double boundaryTemp; //temperature of fin surroundings 
    Steampipe Pipe; //steampipe object - COMPOSITION 
    GridPt GridArray[maxFinHeight][maxFinWidth]; // array of GridPts - COMPOSITION 

public: 
    int getwidth() {return width;} 
    int getheight() {return height;} 
    int getpipeLocationX(){return pipeLocationX;} 
    int getpipeLocationY(){return pipeLocationX;} 
    double get_boundarytemp(){return boundaryTemp;} 
    void setwidth (int w){w=width;} 
    void setheight (int h){h=height;} 
    friend istream& operator>>(istream& , Fin&); // YOU MUST DEFINE 
    friend ostream& operator<<(ostream& , const Fin&); // YOU MUST DEFINE 

    void initialize(); // YOU MUST DEFINE 
}; 

void Fin::initialize() 
{ 
    int j(0) ,i(0); 
    for (i = 0; i < height; i++) 
    { 
    for ( j = 0; j < width; j++) 
    { 
     if ( j == pipeLocationX && i == pipeLocationY 
      && i < Pipe.getHeight() + pipeLocationY 
      && j < Pipe.getWidth() + pipeLocationX) 
     { 
     GridArray [j][i].setTemperature(Pipe.getSteamTemp()); 
     GridArray [j][i].setsymbol('H'); 
     } 
     else if (j == (width -1) || i == (height -1) || j == 0 || i == 0) 
     { 
     GridArray [j][i].setTemperature(boundaryTemp); 
     GridArray [j][i].setsymbol('C'); 
     } 
     else 
     { 
     GridArray [j][i].setTemperature((Pipe.getSteamTemp() + boundaryTemp)/2); 
     GridArray [j][i].setsymbol('X'); 
     } 
    } 
    } 
} 



istream &operator >> (istream & in, Fin& f) 
{ 
    int ws, hs; 
    double ts; 
    char comma; 

    cout << "Enter the height of the fin (integer) >>> "; 
    in >> f.height; 

    cout << "Enter the width of the fin (integer) >>> " ; 
    in >> f.width; 

    cout << "Enter the height of the streampipe (integer) >>> "; 
    in >>hs; 
    f.Pipe.setHeight(hs); 
    cout << "Enter the width of the steampipe (integer) >>> "; 
    in >> ws; 
    f.Pipe.setWidth(ws); 
    cout << "Enter coordinates of lower left corner of steampipe (X,Y) >>> "; 
    in >> f.pipeLocationX >> comma >> f.pipeLocationY; 

    cout << "Enter the steam temperature (floating point) >>> "; 
    in >> ts; 
    f.Pipe.setSteamTemp(ts); 
    cout << "Enter the temperature around the fin (floating point) >>> "; 
    in >> f.boundaryTemp; 
    return in; 
} 

ostream &operator << (ostream &stream, const Fin& t) 
{ 
    int i = 0; 
    int j = 0; 

    stream << "The width of the fin is " << t.width << endl; 

    stream << "The height of the fin is " << t.height << endl; 

    stream << "The outside temperature is " << t.boundaryTemp << endl; 

    stream << "The lower left corner of the steam pipe is at " 
     << t.pipeLocationX <<  "," << t.pipeLocationY << endl; 

    stream << "The steampipe width is " << t.Pipe.getWidth() << endl; 

    stream << "the steampipe height is " << t.Pipe.getHeight() << endl; 

    stream << "The temperature of the steam is " << t.Pipe.getSteamTemp() << endl; 

    for (i = 0; i < t.height; i++) 
{ 
    for ( j = 0; j < t.width; j++) 
    { 
     if (j == t.pipeLocationX && i == t.pipeLocationY && i < t.Pipe.getHeight() + t.pipeLocationY && j < t.Pipe.getWidth() + t.pipeLocationX) 
     { 
      t.GridArray [j][i].getTemperature(); 
      stream<<t.GridArray [j][i].getsymbol(); 

     } 
     else if (j == (t.width -1) || i == (t.height -1) || j == 0 || i == 0) 
     { 
      t.GridArray [j][i].getTemperature(); 
      stream<<t.GridArray [j][i].getsymbol(); 
     } 
     else 
     { 
      t.GridArray [j][i].getTemperature(); 
      stream<<t.GridArray [j][i].getsymbol(); 
     } 

    }stream<<endl; 
} 

    int coorx(0),coory(0);char comma; 

    stream << "Enter the coordinates of the gridpoint of interest (X,Y) >>> " 
     << endl; 
    cin>>coorx>>comma>>coory; 
    stream<<"The temperature at location ("<<coorx<<","<<coory<<") is " 
     << t.GridArray << endl; 

    return stream; 
} 

和我的驱动程序文件CPP是:

#include "pipe.h" 

int main() 
{ 
    Fin one; 
    cin >> one; 
    one.initialize(); 
    cout << one; 

    return 0; 
} 

任何建议将非常赞赏。谢谢

+0

至少尝试使用一些缩进的代码并将其缩小到实际的问题。否则这太痛苦了。 – pmr

+0

是的,这里有一大块代码,编辑它的可读性似乎太高了!请简要,格式良好的例子。 – Rook

回答

0

在你的代码下面是错误的:

void setTemperature (double T=0) {T=temperature;} 
void setsymbol (char S='?'){S=symbol;} 

它必须是:

void setTemperature (double T=0) {temperature = T;} 
void setsymbol (char S='?') { symbol = S;} 

顺便说一句:这不是一个好习惯,把函数定义在头(除非它是一个模板),而是把它们放在源文件中,只是在头文件中声明。
stream<<t.GridArray;
这是行不通的:

在你的代码也在您的输出流直接使用t.GridArray。 它不是一个函数,或者一个类型,ostream将理解。 使用已声明的i和j变量,并逐步通过数组的每个元素来打印它们,与初始化数组时相同。

+0

谢谢Slashmais,老师给了我们头部的一部分。我们应该初始化函数管道并创建数组,我们不能在源代码中移动任何函数。顺便说一句,我只是切换温度和符号方面,仍然无法正常工作。我所得到的是函数地址= 002e8728 – lolo1116

+0

再次感谢你Slashmais,我做了你所说的,现在看起来好多了。唯一的问题是我没有得到填充'H'的内部矩形。但我不断寻找任何我可能会错过的东西。 – lolo1116

+0

@ lolo1116:这就是学习的方式,玩代码,做出改变,看看会发生什么。你应该从现在开始做的一个非常好的习惯是当你有工作代码时,在你改变它之前备份它。这样,当您的更改触发时,您可以将其复制回来,然后重试。 (并相信我是'何时'不是'如果';) – slashmais