2013-04-26 120 views
0

所以我有一個類Coord,它是一個屏幕位置(x,y)和一個類Grid,應該是這些Coords中的13個數組,從文本文件讀入。 我碰到的錯誤是錯誤C2512:'Coord':沒有合適的默認構造函數可用grid.h 26 儘管我有兩個Coord.h構造函數,但我認爲它會使用輸入流?有點在這裏從其他來源盜取零碎和學習,所以請原諒我,如果我忽略了明顯的東西。VS 2008 C++對象數組

Coord.h

# pragma once 

// class for whole screen positions 

#include "DarkGDK.h" 
#include <istream> 

using std::istream; 

class Coord 
{ 
    float cx, cy; 

    public: 
     Coord(float x, float y) : cx(x), cy(y) {} //set components directly 
     Coord(istream& input); //set from input 

     float x() 
     { 
      return cx; 
     } 
     float y() 
     { 
      return cy; 
     } 

     Coord operator+(const Coord& c); 
}; 

Coord::Coord(istream& input) 
{ 
    input >> cx >> cy; 
} 

Coord Coord::operator+(const Coord& c) 
{ 
    return Coord(cx+c.cx, cy+c.cy); 
} 

Grid.h

# pragma once 

// class for the grid array 

#include "DarkGDK.h" 
#include "Coord.h" 
#include <fstream> 
#include <iostream> 

using namespace std; 

const int N = 13; 
const char filename[] = "grid.txt"; 

class Grid 
{ 
    Coord gridpos[N]; 

    public: 
     Grid(); 
     void FillGrid(); //read-in coord values 
}; 

Grid::Grid() 
{ 
    FillGrid(); 
} 

void Grid::FillGrid() 
{ 
    int i; 

    ifstream filein(filename, ios::in); //file for reading 

    for(i=0; !filein.eof(); i++) 
    { 
     filein >> gridpos[i].x >> gridpos[i].y; //read in 
     filein.close(); 
    } 
} 

任何幫助表示讚賞,感謝。

+1

你有一個很大的誤區與地方如何構造服用'istream的&'可以輸入初始化的對象。 'Coord gridpos [N];'表示在你的構造函數體輸入之前,所有這些都是默認初始化的。 – chris 2013-04-26 23:49:16

+0

對不起,不知道我在想什麼來得出我所做的結論,哈哈。 – DarkMalice 2013-04-27 01:05:44

回答

1

你的代碼中有許多小錯誤。這裏有一個版本可以與一些註釋一起使用。

#include <fstream> 
#include <iostream> 

using namespace std; 

const int N = 13; 
const char filename[] = "grid.txt"; 

class Coord 
{ 
    float cx, cy; 

    public: 
     // Default constructor required to declare array: eg Coord c[23]; 
     Coord() : cx(0), cy(0) 
     {} 

     Coord(float x, float y) : cx(x), cy(y) 
     {} 
     // You were returning float instead of float& which means you could not update 
     float& x() 
     { 
      return cx; 
     } 

     float& y() 
     { 
      return cy; 
     } 

     Coord Coord::operator+(const Coord& c) 
     { 
      return Coord(cx+c.cx, cy+c.cy); 
     } 

     friend istream& operator>>(istream& input, Coord& rhs) 
     { 
      input >> rhs.cx >> rhs.cy; 
      return input; 
     } 
}; 


class Grid 
{ 
    Coord gridpos[N]; 

    public: 
     Grid() 
     { 
      FillGrid(); 
     } 

     void FillGrid() 
     { 
      int i; 

      ifstream filein(filename, ios::in); //file for reading 

      for(i=0; !filein.eof(); i++) 
      { 
       filein >> gridpos[i]; 
      } 
       // Close the file after you have finished reading from it 
      filein.close(); 
     } 
}; 


int main() 
{ 
    Grid g; 
    return 0; 
} 
+0

這太棒了,謝謝彼得(謝謝你克里斯,認爲我的頭在這個時候磨損感覺更糟糕)。 – DarkMalice 2013-04-27 00:23:44