webForumDet fria alternativet

Över hunda fel. Fattar noll!

C/C++

9 svar · 418 visningar · startad av Sebbe

Medlem sedan jan. 20032 285 inlägg
Frågan#1

Har den här koden:

#include <iostream.h>

class Animal {
public:
	Animal() {}
	virtual ~Animal() {}
	void setName(char name) { itsName = name; }
	void setAge(int age) { itsAge = age; }
	virtual void speak() const { cout << "Makes some noice."; }
protected:
	int itsAge;
	char itsName;
};

class Cat : public Animal {
public:
	Cat(char name, int age) { setName(name); setAge(age); }
	~Cat() {} 
	void speak() const { cout << this->itsName << " meows.\n"; }
};

class Dog : public Animal {
public:
	Dog(char name, int age) { setName(name); setAge(age); }
	~Dog() {}
	void speak() const { cout << this->itsName << " woofs.\n"; }
};

int main() {
	Animal * djur;
	enum CHOICE { Cat = 1, Dog = 2 };

	cout << "Do you want a cat (1) or a dog (2)?";
	int val;
	cin >> val;

	if (val == Cat)
		djur = new Cat('C', 2);
	else if (val == Dog)
		djur = new Dog('D', 7);

	djur->speak();
	delete djur;
	return 0;
} // <-- Rad 45

och får felen

Compiling...
test.cpp
C:\Documents and Settings\Sebastian\Skrivbord\C++\test2\test.cpp(38) : error C2061: syntax error : identifier 'Cat'
C:\Documents and Settings\Sebastian\Skrivbord\C++\test2\test.cpp(40) : error C2061: syntax error : identifier 'Dog'
C:\Documents and Settings\Sebastian\Skrivbord\C++\test2\test.cpp(45) : error C2143: syntax error : missing ';' before '}' (Detta får jag MASSOR av gånger)
C:\Documents and Settings\Sebastian\Skrivbord\C++\test2\test.cpp(45) : fatal error C1003: error count exceeds 100; stopping compilation
Error executing cl.exe.

test.exe - 102 error(s), 0 warning(s)

Fattar absolut ingenting!

Observera att jag är nybörjare på C++. ;)

Medlem sedan juni 200010 432 inlägg
#2
enum CHOICE { Cat = 1, Dog = 2 };

	cout << "Do you want a cat (1) or a dog (2)?";
	int val;
	cin >> val;

	if (val == Cat)
		djur = new Cat('C', 2);
	else if (val == Dog)
		djur = new Dog('D', 7);

Du bör bestämma dig för vad saker ska heta. Du har i CHOICE sagt att Cat är lika med det numeriska värdet 1. Men sen vill du skapa ett objekt Cat vilket leder till konflikt ... mao räcker det med att du döper om dina enums till nåt annat för att få det att fungera. Undvik iostream.h. Använd istället iostream utan h och ange std:: före inmatning och utskrifter. (std::cin) och (std::cout)

Medlem sedan jan. 20032 285 inlägg
#3

Tack så mycket!!
Har suttit och grubblat på det där i många timmar nu. :D

Medlem sedan jan. 20032 285 inlägg
#4

Fick ett till problem nu. Lika bra att fortsätta i den här tråden.

På raden

void speak() const { std::cout << this->itsName << " woofs.\n"; }

får jag felmeddelandet

error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<cha
r> >' (or there is no acceptable conversion)

Har bytt namnen i klasserna till typen string.

Medlem sedan dec. 20003 887 inlägg
#5

red.
Jag läste just att mitt svar blev överflödigt eftersom

Sebbe skrev:

Har bytt namnen i klasserna till typen string.

Medlem sedan dec. 20025 483 inlägg
#6

Har du inkluderat headerfilen string?

#include <string>

:)

Medlem sedan juni 200010 432 inlägg
#7

Skulle gissa på att det är felet, det som Peter S undrar :)

Medlem sedan jan. 20032 285 inlägg
#8

Hade inkluderat string*.h*! Från och med nu tar jag bort alla h-inkluderingar! Tack grabbar! :D

Medlem sedan mars 20034 471 inlägg
#9

Sebbe skrev:

Hade inkluderat string*.h*! Från och med nu tar jag bort alla h-inkluderingar! Tack grabbar! :D

OBS! I C++ är det så att om du inkluderar något från ett befintligt bibliotek, så skrivs det utan .h . Exempel:
# include <iostream>
# include <string>

Om du däremot skriver filerna MyC.cpp MyC.h och ska inkludera denna h-fil i motsvarande cpp-fil, så skrivs det:

# include "myC.h"

Där ska alltså extension:et vara med.

Medlem sedan jan. 20032 285 inlägg
#10

aasah skrev:

Sebbe skrev:

Hade inkluderat string*.h*! Från och med nu tar jag bort alla h-inkluderingar! Tack grabbar! :D

OBS! I C++ är det så att om du inkluderar något från ett befintligt bibliotek, så skrivs det utan .h . Exempel:
# include <iostream>
# include <string>

Om du däremot skriver filerna MyC.cpp MyC.h och ska inkludera denna h-fil i motsvarande cpp-fil, så skrivs det:

# include "myC.h"

Där ska alltså extension:et vara med.

Jodå, det senare var jag medveten om. :)

270 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)