Skocz do zawartości

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


Rekomendowane odpowiedzi

Opublikowano

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ł

Opublikowano

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;

Opublikowano

używaj znaczników [ code ].

poza tym, twój post jest po prostu dziwny i nieprzejrzysty. ale dzięki za starania

Opublikowano

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).

Opublikowano

więc bez externów się nie obędzie. szkoda, będzie trochę roboty. spróbuję tego użyć, jeśli próba zakończy się niepowodzeniem, zedytuję tego posta.

ale dzięki

Opublikowano

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

Opublikowano

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).

Opublikowano

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;
}

Opublikowano

zrobiłem tak jak napisał Konrad-GM i zaczęło działać. jeśli będą jeszcze jakieś błędy, dam edita. dzięki

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ę...