错误:预期`;'在'{'之前 - 原因是什么?

时间:2010-04-15 15:19:08

标签: c++ syntax

这是我的实施文件:

using namespace std;

#include <iostream>
#include <iomanip>
#include <string>
#include <stack>  //line 5
#include "proj05.canvas.h"

//----------------Constructor----------------//

Canvas::Canvas() //line 10
{
  Title = "";
  Nrow = 0;
  Ncol = 0;
  image[][100];  // line 15
  position.r = 0;
  position.c = 0;
}

//-------------------Paint------------------// line 20
void Canvas::Paint(int R, int C, char Color) 
{
  cout << "Paint to be implemented" << endl;
}

我得到的错误是:

proj05.canvas.cpp: In function 'std::istream& operator>>(std::istream&, 
    Canvas&)':
proj05.canvas.cpp:11: error: expected `;' before '{' token
proj05.canvas.cpp:22: error: a function-definition is not 
    allowed here before '{' token
proj05.canvas.cpp:24: error: expected `}' at end of input
proj05.canvas.cpp:24: error: expected `}' at end of input

这些似乎是简单的语法错误,但我不确定是什么问题。有人可以为我解码这些吗?我真的很感激,谢谢你的时间!


修改

以下是我的.h文件中Canvas的定义:

#ifndef CANVAS_H 
#define CANVAS_H 

#include <iostream>
#include <iomanip>
#include <string> 
#include <stack> 

class Canvas
{
  public: 
      Canvas(); void Paint(int R, int C, char Color); 
       const int Nrow; 
       const int Ncol; 
       string Title; 
       int image[][100]; 
       stack<int> path; 
       struct PixelCoordinates 
       {  
         unsigned int r; 
         unsigned int c;
       } position; 
}; 

#endif 

7 个答案:

答案 0 :(得分:8)

"proj05.canvas.h"我打赌问题就在那里。可能不 ;课后def

答案 1 :(得分:6)

您必须使用initializer list初始化const-members

试试这个:

#include <iostream>
#include <iomanip>
#include <string>
#include <stack>  //line 5
#include "proj05.canvas.h"

using namespace std;

//----------------Constructor----------------//

Canvas::Canvas():Nrow(),Ncol() // Initializer list
{
  Title = "";
  //initialize image[][] correctly, your way is syntactically incorrect
  position.r = 0; //correction here
  position.c = 0; // and here
}

//-------------------Paint------------------// line 20
void Canvas::Paint(int R, int C, char Color)
{
   cout << "Paint to be implemented" << endl;
}

答案 2 :(得分:2)

少数事情:

<强> 1

PixelCoordinates.r = 0;
PixelCoordinates.c = 0;

应该是:

position.r = 0;
position.c = 0;

<强> 2

image已经宣布。这是什么:

image[][];

答案 3 :(得分:1)

听起来你忘了在课程定义后加上分号。查看"proj05.canvas.h"。你应该看到类似的东西:

  class Canvas{
    ...
  };

答案 4 :(得分:1)

有一件事让我的眼睛看错了/怪异的是image [] []。那并没有真正做任何事情。另外,我不相信你可以在ctor列表之外分配常数成员。

最后,您对PixelCoordinates的任务完全错误。您已经创建了一个本地结构定义,但没有创建一个使用它的成员,因此您根本无法为其分配任何内容 - 尤其是结构的标题。那真的会让编译器感到困惑。

答案 5 :(得分:0)

让人惊讶。

(不是您具体问题的答案,但......)

您还应该删除

using std;

.h文件中没有商家。 我猜想奇怪的格式化.h文件可能是个问题。当然,它对于文件系统来说是合法的,但也可能是这样。还要确保在课程上有结尾分号。

你需要为你拥有的数组填充两个维度(可能是一个可怕的设计,无论如何都要使用该类...)

答案 6 :(得分:0)

无论其他错误的原因是什么,memeber定义int image[][100]都是非法的。无法使用不完整类型声明类的非静态数据成员。必须明确指定数组的所有维度。