Permalänk
Medlem

irriterande C++ problem

Övar lite i C++ men får ett irriterande fel som jag inte hittar.

Koden:

#include "stdafx.h" #include <iostream> using namespace std ; void funktion2 () { } void funktion () { funktion2 (); } int main () { cout << "Main \n"; funktion(); cout << "tillbaks main \n"; char f; cin >> f; return 0; } void funktion () { cout << "funktion \n"; funktion2(); cout << "tillbaks funktion \n"; } void funktion2 () { cout << "funktion2 \n"; }

Felmeddelande:

1>------ Build started: Project: Tutorial, Configuration: Debug Win32 ------ 1> Tutorial.cpp 1>f:\projekt\c++\tutorial\tutorial\tutorial.cpp(35): error C2084: function 'void funktion(void)' already has a body 1> f:\projekt\c++\tutorial\tutorial\tutorial.cpp(12) : see previous definition of 'funktion' 1>f:\projekt\c++\tutorial\tutorial\tutorial.cpp(45): error C2084: function 'void funktion2(void)' already has a body 1> f:\projekt\c++\tutorial\tutorial\tutorial.cpp(7) : see previous definition of 'funktion2' ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Visa signatur

Asus P8P67 Deluxe B3 | Intel i7-2600k@3,4GHz | 16 GB Corsair Vengeance LP 1600Mhz CL9 | Asus GTX 580 Matrix@900Mhz | Corsair Force GT 120GB | WD Caviar Black 1TB | Corsair 850 AX | Fractal Design R4 | Dell u2410 | Qpad MK-80 | QPad 5K

CITERA FÖR SVAR!

Permalänk
Medlem

Nu är inte C++ min starka sida, men ser att du har 2 void funktion(){ ... } respektive void funktion2(){ ... } metoder.

Permalänk
Medlem
Skrivet av No0Vad:

Nu är inte C++ min starka sida, men ser att du har 2 void funktion(){ ... } respektive void funktion2(){ ... } metoder.

Det har jag men jag behöver ju beskriva void funktion samt void funktion2 innan jag kan använda dem.

Annars kommer de inte kunna identifieras i int main ()

Visa signatur

Asus P8P67 Deluxe B3 | Intel i7-2600k@3,4GHz | 16 GB Corsair Vengeance LP 1600Mhz CL9 | Asus GTX 580 Matrix@900Mhz | Corsair Force GT 120GB | WD Caviar Black 1TB | Corsair 850 AX | Fractal Design R4 | Dell u2410 | Qpad MK-80 | QPad 5K

CITERA FÖR SVAR!

Permalänk

Precis som No0Vad skrev så har du två uppsättningar av funktionerna. ifall du ändrar så att ovanför main() endast har deklarationen av funtionerna och definitionen under main().

#include "stdafx.h" #include <iostream> using namespace std ; void funktion2 (); void funktion (); int main () { cout << "Main \n"; funktion(); cout << "tillbaks main \n"; char f; cin >> f; return 0; } void funktion () { cout << "funktion \n"; funktion2(); cout << "tillbaks funktion \n"; } void funktion2 () { cout << "funktion2 \n"; }

Visa signatur

Denon AVR-1801 | Dali Blue 5005 | Turtle Beach Audio Advantage Micro II

Permalänk
Medlem

Som No0Vad sa så tror jag det har att göra med att du har dubbletter av både funktion och funktion2. Jag tror det kan bero på att du har använt "måsvingar" i prototyperna:

Citat:

#include "stdafx.h"
#include <iostream>
using namespace std ;

void funktion2 ()
{

}

void funktion ()
{

funktion2 ();

}

Pröva att ta bort dem

Edit: Aj då, blev slagen till svaret!

Permalänk
Medlem

som föregående sakt så deklarerar du funktionerna 2 ggr. Om du vill definiera dem i förväg så skriver man void funktion();

för att sedan senare kunna deklarera funktionen så som du gjort.

Permalänk
Skrivet av phantom:

som föregående sakt så deklarerar du funktionerna 2 ggr. Om du vill definiera dem i förväg så skriver man void funktion();

för att sedan senare kunna deklarera funktionen så som du gjort.

Förvirra honom inte nu. Blanda inte ihop definiera och deklarera.

Deklaration är en prototyp av hur en funktion ska se ut.
t.ex.

void foo( void );

definition är när man beskriver exakt hur funktionen ska fungera.

void foo( void ) { std::cout << "bar" << std::endl; }

Visa signatur

Denon AVR-1801 | Dali Blue 5005 | Turtle Beach Audio Advantage Micro II

Permalänk
Medlem

Fan va najs! Berodde på { } i preprocess.

cout << "Tack så mycket!!!!";

Visa signatur

Asus P8P67 Deluxe B3 | Intel i7-2600k@3,4GHz | 16 GB Corsair Vengeance LP 1600Mhz CL9 | Asus GTX 580 Matrix@900Mhz | Corsair Force GT 120GB | WD Caviar Black 1TB | Corsair 850 AX | Fractal Design R4 | Dell u2410 | Qpad MK-80 | QPad 5K

CITERA FÖR SVAR!

Permalänk
Medlem
Skrivet av Lisianthus:

Förvirra honom inte nu. Blanda inte ihop definiera och deklarera.

Deklaration är en prototyp av hur en funktion ska se ut.
t.ex.

void foo( void );

definition är när man beskriver exakt hur funktionen ska fungera.

void foo( void ) { std::cout << "bar" << std::endl; }

Blandar konstant ihop de orden ^__^

Permalänk
Medlem
Skrivet av Lisianthus:

Förvirra honom inte nu. Blanda inte ihop definiera och deklarera.

Deklaration är en prototyp av hur en funktion ska se ut.
t.ex.

void foo( void );

definition är när man beskriver exakt hur funktionen ska fungera.

void foo( void ) { std::cout << "bar" << std::endl; }

Tack för förtydligandet, har bara några timmars programmering under bältet så termerna sitter inte ännu.

Visa signatur

Asus P8P67 Deluxe B3 | Intel i7-2600k@3,4GHz | 16 GB Corsair Vengeance LP 1600Mhz CL9 | Asus GTX 580 Matrix@900Mhz | Corsair Force GT 120GB | WD Caviar Black 1TB | Corsair 850 AX | Fractal Design R4 | Dell u2410 | Qpad MK-80 | QPad 5K

CITERA FÖR SVAR!

Permalänk
Skrivet av Lillem4n:

Fan va najs! Berodde på { } i preprocess.

cout << "Tack så mycket!!!!";

Bra att du fick det att fungera. Kommer mycket väl ihåg när jag var ny till C++ och fick så mycket konstiga kompileringsproblem. Men efter ett tag lär man känna sin kompilator och då går det mycket lättare.

Skrivet av phantom:

Blandar konstant ihop de orden ^__^

Händer även de bästa. Fick själv kolla upp så jag inte blandade ihop dem.

Visa signatur

Denon AVR-1801 | Dali Blue 5005 | Turtle Beach Audio Advantage Micro II