Может кто-нибудь взглянуть на мой код? ошибка C2059: синтаксическая ошибка: 'public'

0

Я пишу программу дерева алгебры. Во время компиляции у меня появилось много ошибок. Я не знаю, откуда берутся ошибки.

Вот мой код:

//file: Term.h
#ifndef TERM
#define TERM
#include <sstream>
#include <string>
using namespace std;

class Term {
public:
  Term() {}
  virtual ~Term() {}
  virtual string symbolicEval() = 0;
  virtual double numericalEval(double X) = 0;
};  
 #endif

//file: UnaryOp.h
#ifndef UNARYOP
#define UNARYOP
#include "Term.h";

class UnaryOp: public Term{
protected:
   Term* Child;
public:
   UnaryOp(Term* l){Child = l;};
   virtual ~UnaryOp(){delete Child;};
   virtual string symbolicEval(){};
  virtual double numericalEval(){};

};
#endif UNARYOP

//file:CCos.h
#ifndef COS_H
#define COS_H

 #include "UnaryOp.h"

 class  Cos: public UnaryOp{
  public:
    Cos(Term * l):UnaryOp(l){};
    virtual ~ Cos(){};
    virtual string symbolicEval(){
    ostringstream oss;
    oss << "cos(x)" << endl;
    return oss.str();
  };
    virtual double numericalEval(double X){
    return cos(Child->numericalEval(X));
  }

  }
  #endif COS_H

При компиляции я получил следующие ошибки:

1>c:\users\administrator\desktop\algebra\algebra\unaryop.h(3): warning C4067: unexpected tokens following preprocessor directive - expected a newline
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2236: unexpected 'class' 'Cos'. Did you forget a ';'?
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2143: syntax error : missing ';' before ':'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2059: syntax error : ':'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2059: syntax error : 'public'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2143: syntax error : missing ';' before '{'
1>c:\users\administrator\desktop\algebra\algebra\ccos.h(6): error C2447: '{' : missing function header (old-style formal list?)
1>c:\users\administrator\desktop\algebra\algebra\algebra.cpp(29): error C2061: syntax error : identifier 'Cos'

Может кто-нибудь подскажет мне, где я ошибаюсь?

  • 1
    Никогда не ставьте using namespace std; в шапке. Никогда, никогда, никогда, никогда.
  • 1
    "Вы забыли ';'?" сообщение актуально. У тебя нет ';' в конце класса Cos.
Показать ещё 2 комментария
Теги:

3 ответа

0
Лучший ответ

Начните с замены

#include "Term.h";

от

#include "Term.h"

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

  • 1
    это не сломает компиляцию, я думаю
  • 0
    @ Док Браун, привет! спасибо за ответ ... Я почти разочарован, так как это первый раз, когда я написал такой большой проект ...
Показать ещё 2 комментария
0

Несколько вещей.

Почему вы предоставляете определение методов в файлах заголовков?

//file:CCos.h
#ifndef COS_H
#define COS_H

 #include "UnaryOp.h"

 class  Cos: public UnaryOp{
  public:
    Cos(Term * l):UnaryOp(l){};
    virtual ~ Cos(){};
    virtual string symbolicEval(){
    ostringstream oss;
    oss << "cos(x)" << endl;
    return oss.str();
  };
    virtual double numericalEval(double X){
    return cos(Child->numericalEval(X));
  }

  }
  #endif COS_H

Если вы используете "{}" после объявления метода в файле ".H", не могли бы вы объяснить, что это значит? Как это понимает компилятор?

Когда вы используете двоеточие? Это после объявления метода или после определения или для обоих?

Скомпилированы ли файлы.h? Зачем? почему нет?

Если бы вы могли ответить на них, у вас есть свой ответ. Это скорее домашнее задание. Попросите вас разместить только релевантные и только те вопросы, для которых вам нужна техническая помощь.

-2

вам не хватает замыкающей скобки виртуальной функции symbolicEval().

  • 0
    пожалуйста отметьте решение как ответ, если оно работает.
  • 1
    Нет. Отступы вводят в заблуждение, но они есть.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню