Avatar billede scirocco Nybegynder
25. juni 2008 - 09:52 Der er 11 kommentarer og
1 løsning

Kør noget af main/coden i en anden fil

Er det muligt at køre noget af min code fra en anden fil en main.

f.esk:

ExtFile:
int b=2;

mainFile:
void main(){
int A=5;
(call ExtFile)
cout << a+b;
}
Avatar billede pidgeot Nybegynder
25. juni 2008 - 09:56 #1
Tjoh... du kan jo bruge at preprocessoren kan inkludere filer:

void main(){
int A=5;
#include "ExtFile"
cout << a+b;
}

Men jeg vil ikke mene det er specielt pænt.
Avatar billede arne_v Ekspert
25. juni 2008 - 15:19 #2
Jeg ville refactorere den delte kode ud i en funktion.
Avatar billede scirocco Nybegynder
25. juni 2008 - 21:02 #3
Jeg har prøvet begge dele men har ikke helt kunne få det til at virke. Jeg har sikkert heller ikke forklaret mig helt detaljeret nok. Vil selvfølgelig herne give flere point hvis det er muligt.

Mit program ser sådan ud:

Test.h:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <time.h>
#include <stdlib.h>

class state {declare variable and functions1,2,3....}

void other_function1();
void other_function2();
.....



Test1.cpp:
#include "stdafx.h"
#include "test1.h"

main{
....
....
#include "ekstra.h"
s1.function1();
cout << &s2;

}

void state::function1()
void state::function2()
void state::function3()

void other_functions1()
void other_functions2()
...

ekstra.cpp:
#include "stdafx.h"

state s1;
state s2;

s1.function1() // Jeg kan ikke bruge funktionerne i klassen s1



Jeg ønsker altså at kunne bruge filen ekstra.cpp til at lave nogle instanser af klassen state samt herefter at kunne udnytte klassens funktioner( s1.funktion1()...). Dette skulle gerne køres via et kald fra main(). Klasserne s1,s2 skal herefter kunne bruges i resten af main samt underfunktioner.

Jeg har prøvet at refractorere koden i filen ekstra til en funktion som jeg kalder fra main() men s1,s2 optræder derved kun som lokale klasser og kan ikke bruges i resten af main().

Håber jeg har forklaret mig tilstrækkeligt.

mvh Thomas
Avatar billede pidgeot Nybegynder
25. juni 2008 - 21:47 #4
Dit problem er nu et helt andet! I en klasse er alt private med mindre andet er angivet - og det vil sige de kun kan tilgås indefra din klasse, ikke fra kode der ligger udenfor.

For at kunne kalde dem udefra, skal de markeres som værende public - det gøres ved at skrive public foran returtypen. Det har altså intet at gøre med at du prøver at kalde kode i en anden fil - du havde heller ikke kunnet gøre det selvom du kun havde en enkelt CPP-fil.

Jeg gætter på du er ny indenfor programmering - og du har sikkert en bog du sidder med. Jeg vil i så fald foreslå du måske læser mere om teorien bag objekt-orienteret programmering - det kan være det giver mere mening efter det :)
Avatar billede segmose Nybegynder
26. juni 2008 - 10:08 #5
Kunne du skrive en konkret fejl melding du får?
Avatar billede scirocco Nybegynder
26. juni 2008 - 12:17 #6
Klassen er deklereret public:

class state
{
public:
void function1();
void function2();

};
Det burde da være godt nok ik? Ellers vil du måske give et lille eksempel?

Jeg får flg fejlmeddelser:

ekstra.cpp:
error C2143: syntax error : missing ';' before '.'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2371: 's1' : redefinition; different basic types
see declaration of 's1'

Test1.cpp:
warning C4822: 'wmain::state::function1' : local class member function does not have a body
Avatar billede kenneth_gorking Nybegynder
27. juni 2008 - 02:58 #7
Du mangler at inkludere 'Test.h' i 'ekstra.cpp'.
Avatar billede scirocco Nybegynder
27. juni 2008 - 09:17 #8
Det har jeg gjort men glemte bare at skrive det.

ekstra.cpp:
#include "stdafx.h"
#include "test1.h
state s1;
state s2;

s1.function1() // Jeg kan ikke bruge funktionerne i klassen s1



Hvis jeg i stedet laver en funktion(init_s1()) og kalder den fra main virker s1.function1() i ekstra.cpp men objektet s1 forsvinder igen når init_s1 er afsluttet.

ekstra.cpp:
#include "stdafx.h"
#include "test1.h
void init_s1(){
state s1;
state s2;
s1.function1(); // Nu kan jeg kalde funktionen i objektet uden problemer.
}


Test1.cpp:
#include "stdafx.h"
#include "test1.h"

main{
....
....
init_s1(); // Virker fint
s1.function1(); // objektet s1 kan ikke bruges i resten af main.
cout << &s1; //
}
Avatar billede scirocco Nybegynder
27. juni 2008 - 09:19 #9
Nåja
void init_s1(); er selvfølgelig erklaret i test1.h
Avatar billede kenneth_gorking Nybegynder
27. juni 2008 - 15:07 #10
Nå, nu ser jeg fejlen :)

Du kan ikke køre funktioner i globalt space, de kan kun køres i andre funktioner. Det er derfor det virker i init_s1().
Avatar billede scirocco Nybegynder
27. juni 2008 - 15:39 #11
Ok tak. Nu mangler jeg bare at kunne køre init_s1() fra main og bagefter udnytte s1 i resten af main()
Test1.cpp:
#include "stdafx.h"
#include "test1.h"

main{
....
....
init_s1(); // Virker fint
s1.function1(); // objektet s1 kan ikke bruges i resten af main.
cout << &s1; //
}
Avatar billede scirocco Nybegynder
29. juni 2008 - 12:20 #12
Jeg har selv fundet en løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester