Mi a hiba a forráskódban? /C++
//main.cpp
# include <iostream>
# include <stdlib.h>
typedef unsigned short ushort;
typedef unsigned int uint;
using std::cout;
using std::cin;
using std::endl;
class Counter
{
public:
Counter(int x); //Konstruktor
Counter(const Counter &); //Másoló konstruktor
~Counter(); //Destruktor
void increment() {++*itsVal;}
const &Counter operator++ (); //prefix
const Counter operator++ (int) {} //postfix
void SetVal(int x);
int GetVal()const;
private:
int *itsVal;
};
Counter::Counter(int x):
itsVal(new int(x))
{cout <<"Konstruktor \n";}
Counter::Counter(const Counter &rhs)
{
cout <<"Copy konstruktor \n";
itsVal = new int;
*itsVal = rhs.GetVal();
}
Counter::~Counter()
{
cout <<"Destruktor \n";
delete itsVal;
itsVal = NULL;
}
const Counter& Counter::operator++ ()
{
++*itsVal;
return *this;
}
//
void Counter::SetVal(int x)
{*itsVal = x;}
int Counter::GetVal()const
{return *itsVal;}
//main kezdődik
int main()
{
Counter i(2);
return EXIT_SUCCESS;
}
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|21|error: ISO C++ forbids declaration of 'Counter' with no type [-fpermissive]|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|21|error: expected ';' at end of member declaration|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|21|error: ISO C++ forbids declaration of 'operator++' with no type [-fpermissive]|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|22|error: 'Counter' does not name a type|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|21|error: field 'const int& Counter::Counter' with same name as class [-fpermissive]|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp||In constructor 'Counter::Counter(int)':|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|30|error: uninitialized reference member 'Counter::Counter' [-fpermissive]|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|34|error: 'Counter' does not name a type|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|34|error: ISO C++ forbids declaration of 'rhs' with no type [-fpermissive]|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|34|error: prototype for 'Counter::Counter(const int&)' does not match any in class 'Counter'|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|17|error: candidates are: Counter::Counter(const Counter&)|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|30|error: Counter::Counter(int)|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|48|error: prototype for 'const Counter& Counter::operator++()' does not match any in class 'Counter'|
C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|21|error: candidate is: int Counter::operator++()|
||=== Build finished: 13 errors, 0 warnings ===|
szerintem az hogy a pc-d merevlemezére hivatkozik az egész.
"C:\Users\ALWAYS_WINS\Desktop\Code Blocks mentesek\Practice_5\main.cpp|"
haverod is hasonlókat kérdezgetett: http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..
- const &Counter operator++ (); //prefix
+ const Counter& operator++ (); //prefix
- const Counter operator++ (int) {} //postfix
+ const Counter operator++ (int) { return *this; } //postfix
Nem.
De nem tudom mi a hiba.
Léci mondjátok meg.
A kolléga valamiért azt hiszi, hogy egy gyerek, aki elkezdett C++-t kódolni, tudni fogja olvasni a diffet.
Ez:
- const &Counter operator++ (); //prefix
+ const Counter& operator++ (); //prefix
azt jelenti, hogy az első ki, a második be. Azaz cseréld le azt a sort (az elsőt) a másikra.
Még mindig nem jó:
//main.cpp
# include <iostream>
# include <stdlib.h>
typedef unsigned short ushort;
typedef unsigned int uint;
using std::cout;
using std::cin;
using std::endl;
class Counter
{
public:
Counter(int x); //Konstruktor
Counter(const Counter &); //Másoló konstruktor
~Counter(); //Destruktor
void increment() {++*itsVal;}
const Counter& operator++ (); //prefix
const Counter operator++ (int) {} //postfix
void SetVal(int x);
int GetVal()const;
private:
int *itsVal;
};
Counter::Counter(int x):
itsVal(new int(x))
{cout <<"Konstruktor \n";}
Counter::Counter(const Counter &rhs)
{
cout <<"Copy konstruktor \n";
itsVal = new int;
*itsVal = rhs.GetVal();
}
Counter::~Counter()
{
cout <<"Destruktor \n";
delete itsVal;
itsVal = NULL;
}
const Counter& Counter::operator++ ()
{
++*itsVal;
return *this;
}
//
void Counter::SetVal(int x)
{*itsVal = x;}
int Counter::GetVal()const
{return *itsVal;}
//main kezdõdik
int main()
{
Counter i(1);
cout <<"i erteke: "<< i.GetVal << endl;
++i;
cout <<"i erteke: "<< i.GetVal << endl;
return EXIT_SUCCESS;
}
Olyan sok a hiba,hogy nem engedi ki íratni ide.
const Counter operator++ (int) {} //postfix
Ebből hiányzik a "return *this;", de ezt már másodjára mondom. Counter típusú objektummal kell visszatérnie, mert annak deklaráltad, tehát nem lehet üres a függvénytörzs.
cout <<"i erteke: "<< i.GetVal << endl;
A GetVal a Counter osztályban nem tagváltozó, hanem függvény, úgyhogy kellene mögé a zárójelpár. Itt a kijavított, működő kódod és a futtatás eredménye is: [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!