Skocz do zawartości

Różnice pomiędzy C a C++


Jaklub

Rekomendowane odpowiedzi

postanowiłem wziąć się w garść i kontynuować mój projekt pisany w C. zdecydowałem się nie cackać z winsockiem bezpośrednio, więc muszę przepisać projekt na C++, jednak po prostu nie ogarniam poprawnego załączania dodatkowych plików do kodu.

w C robiłem to tak:

main.c

#include "plik.h"

int main() {
  super();
... dalszy kod ...

plik.h

int c;
void super();

plik.c

#include "plik.h"

void super() {
c=0;
}

metoda ta oczywiście wywala błędy (bodajże wielokrotne inicjowanie danej wartości). piszę z pamięci.

jak robić to tak, aby działało?

 

edit: poprawka w kodzie, fatalny błąd był

Odnośnik do komentarza
Udostępnij na innych stronach

jak masz dwa pliki korzystające z jednej zmiennej to używaj extern a nie deklaruj w haderze przykład:

lolek.cpp:

...

int kabu;

kabu=3;

....

bolek.cpp:

...

extern int kabu

....

 

i w tedy zmienna w bolku będzie miała wartość 3

możesz też używać funkcji np bool zom(); zamiast bool zom;

Odnośnik do komentarza
Udostępnij na innych stronach

Deklarację tej zmiennej w pliku .h zostaw, dodaj tylko jej definicję w .cpp poprzedzoną keywordem "extern".

// plik.h
int zmienna;

// plik.cpp
extern int zmienna;

Poza tym, zabezpiecz ten plik nagłówkowy przed wielokrotnym include'owaniem (#pragma once albo za pomocą makr).

Odnośnik do komentarza
Udostępnij na innych stronach

da sie masz przykład

a.h:

int lol();

b.cpp:

#include <iostream>
#include <conio.h>// dla getch()
#include "a.h"
int main()
{
    std::cout << lol();
    getch();
}

c.cpp:

#include <iostream>
#include "a.h"

int lol()
{
    return 10;
}

po prostu używaj w haderze funkcji int lol() zamiast int lol

Odnośnik do komentarza
Udostępnij na innych stronach

Pisz obiektowo. Serio, o wiele łatwiej. przyjemniej i prościej. Zmienne globalne to chyba jakiś żart. Jedna z większych zalet cpp (można by mówić też o tym całym objective-cpp ale widziałem go tylko w api dla iphona/itoucha/ipada).

Odnośnik do komentarza
Udostępnij na innych stronach

Pierdzielicie trzy po trzy. Ktoś z was wo gule sprawdzał czy to się skompiluje?

Po pierwsze... "int c;" w pliku H nie ujdzie... Po drugie, tam powinno się znajdować "extern int c;". Po drugie "int c;" wstawia się w pliku CPP, a "extern int c;" w H :)

 

Dla opornych:

Plik *.H

#ifndef _*_H_
#define _*_H_

extern int c;
void super( void );

#endif

Plik *.CPP

include "*.H"
int c = 0;

void super( void )
{
    c = 10;
}

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...