ошибка: ожидается `; ' до знака «{» - В чем причина? - PullRequest
1 голос
/ 15 апреля 2010

Вот мой файл реализации:

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

Это похоже на простые синтаксические ошибки, но я не уверен, что не так. Может ли кто-нибудь расшифровать их для меня? Буду очень признателен, спасибо за ваше время!


EDIT

Вот определение Canvas в моем .h файле:

#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 ]

8 голосов
/ 15 апреля 2010

"proj05.canvas.h" Бьюсь об заклад, проблема есть. возможно, нет ; после класса def

6 голосов
/ 15 апреля 2010

Вы должны использовать 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 голосов
/ 15 апреля 2010

Мало вещей:

1

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

должно быть:

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

2

image уже объявлено. Что это:

image[][];
1 голос
/ 15 апреля 2010

Одна вещь, которая бросается в глаза как неправильная / странная, это изображение [] []. Это на самом деле ничего не делает. Кроме того, я не верю, что вы можете назначить постоянный член вне списка ctor.

Наконец, ваше назначение PixelCoordinates полностью ошибочно. Вы создали локальное определение структуры, но не создали члена, который его использует, поэтому вы не можете вообще ничего ему присвоить - особенно заголовок структуры. Это действительно запутало бы компилятор.

1 голос
/ 15 апреля 2010

Похоже, вы забыли поставить точку с запятой после определения класса. Посмотри в "proj05.canvas.h". Вы должны увидеть что-то вроде:

  class Canvas{
    ...
  };
0 голосов
/ 15 апреля 2010

Какой бы ни была причина других ошибок, определение члена int image[][100] является недопустимым. Нестатические члены данных класса не могут быть объявлены с неполными типами. Все размеры массива должны быть указаны явно.

0 голосов
/ 15 апреля 2010

Хлоп.

(Не ответ на вашу конкретную проблему, но ...)

Вы также должны удалить

using std;

Это не имеет никакого отношения к файлу .h. Я собираюсь предположить, что странно отформатированный файл .h может быть проблемой. Конечно, это допустимо для файловой системы, но это может быть так. Также убедитесь, что у вас есть конечная точка с запятой в классе.

Вам нужно заполнить оба измерения для имеющегося массива (вероятно, ужасный дизайн, чтобы использовать этот класс в любом случае ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...