Enum "missing ';' before..."

0

Witam,
Od jakiegoś czasu męczę się z kawałkiem kodu, który zdawał mi się prosty i oczywisty, zdaje mi się że to jakiś głupi błąd.
Dokładnie chodzi o to że mam klasę calculator, w niej zdefiniowany typ wyliczeniowy enum complexNotation, oraz 2 metody które zwracają wartość tego właśnie typu.
Podczas kompilacji wyświetla mi się błąd:

Error	1	error C2143: syntax error : missing ';' before 'calculator::getDisplayNotation'
Error	2	error C2761: 'calculator::complexNotation ' : member function redeclaration not allowed
Error	3	error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Error	4	error C2556: 'int calculator::getDisplayNotation(void)' : overloaded function differs only by return type from 'calculator::complexNotation calculator::getDisplayNotation(void)'
Error	5	error C2371: 'calculator::getDisplayNotation' : redefinition; different basic types

Szukałem odpowiedzi w google i próbowałem się do nich dostosować(wcześniej definicja tego typu wisiała w powietrzu(poza klasą) i też pod Visualem nie działało)
Podaję kod:
rpn.cpp:

#include <iostream>
#include <string>
#include "complex.h"
#include "rpn.h"

calculator::complexNotation calculator::getDisplayNotation()
{
		return this->displayNotation;
}

rpn.h

class calculator{
private:
	complexNotation displayNotation;
	complexNotation inputNotation;
...
public:
	enum complexNotation {  CN_TraditionalNotation, CN_ScientificNotation};
	complexNotation getDisplayNotation();
	complexNotation getInputNotation();
...

Z góry dzięki za podpowiedzi ;)

1
private:
        complexNotation displayNotation; // <- Nie wiadomo co to jest complexNotation, error.
        complexNotation inputNotation;   // <- Nie wiadomo co to jest complexNotation, error.
...
public:
        enum complexNotation {  CN_TraditionalNotation, CN_ScientificNotation}; // <- Definicja complexNotation.

Skąd kompilator ma wiedzieć co to jest complexNotation zanim to zdefiniujesz?

Takie rzeczy normalnie działają:

#include <iostream>
 
class X {
public:
  enum Cokolwiek {
    BLE,
    BLEBLE
  };
  
  Cokolwiek zapodajCokolwiek();
};
 
X::Cokolwiek X::zapodajCokolwiek() {
  return X::BLE;
}
 
int main() {
  X x;
  
  X::Cokolwiek ble = x.zapodajCokolwiek();
  
  return 0;
}

http://ideone.com/LlMGVo

0

rpn.h

#ifndef RPN_HH_INCLUDED
#define RPN_HH_INCLUDED
#include <stack>
#include <map>

class calculator{
public:
	enum complexNotation {  CN_TraditionalNotation, CN_ScientificNotation};
private:
	complexNotation displayNotation;
	complexNotation inputNotation;
	std::stack<std::string> Stack;
	std::map<std::string, complexNumber*> Map;
public:
//Notation Settings
	complexNotation getDisplayNotation();
	complexNotation getInputNotation();

Wciąż te same błędy

Koniec tematu, błąd był jeszcze głupszy niż podejrzewałem, tutaj go nie widać :/

0

Szybka proteza (trzeba było dodać <string>):

#include <stack>
#include <map>
#include <string>
 
typedef int complexNumber; // stub
 
class calculator{
public:
        enum complexNotation {  CN_TraditionalNotation, CN_ScientificNotation};
private:
        complexNotation displayNotation;
        complexNotation inputNotation;
        std::stack<std::string> Stack;
        std::map<std::string, complexNumber*> Map;
public:
//Notation Settings
        complexNotation getDisplayNotation() {}
        complexNotation getInputNotation() {}
};
 
int main() {
  return 0;
}

http://ideone.com/LK8fx7

Nie ma żadnych błędów.

Edit: ok.

1 użytkowników online, w tym zalogowanych: 0, gości: 1