Visual C++ zmienne i funkcje z plików zewnętrznych

0

Do projektu w Visual C++ (2019) dołączyłem plik o nazwie dane.h w którym przechowuje swoje zmienne i funkcje. Oczywiście "zaincludowałem" plik (#include "dane.h") i kompilacja przebiegła bez zakłóceń. Błędy zaczynają wyskakiwać, kiedy chcĘ użyć tych danych z zewnątrz w wewnątrz projektu . Za każdym razem komunikat wygląda identycznie - zmienna x - niezdefiniowana. We wcześniejszych wersjach czegoś takiego nie miałem. Środowisko łykało z plików .h wszystko. Każdą zmienną, funkcje, strukturę, czy klasę.

0

Błędy zaczynają wyskakiwać, kiedy chcĘ użyć tych danych z zewnątrz w wewnątrz projektu .

Bosch ... to nie jest do zrozumienia.

Mozę zamiast opowiedac o kodzie, to do niczego nie prowadzi - daj ten kod.

3

We wcześniejszych wersjach czegoś takiego nie miałeś ponieważ dołączałeś ten plik .h do jednego źródła.
Jeżeli chcesz korzystać z zewnątrz to tak nie przejdzie.
https://cpp0x.pl/kursy/Kurs-C++/Dodatkowe-materialy/Dzielenie-kodu-na-kilka-plikow-zrodlowych/310 - generalnie kurs tak sobie ale podział na pliki napisany prostym językiem.

0
_13th_Dragon napisał(a):

We wcześniejszych wersjach czegoś takiego nie miałeś ponieważ dołączałeś ten plik .h do jednego źródła.
Jeżeli chcesz korzystać z zewnątrz to tak nie przejdzie.
https://cpp0x.pl/kursy/Kurs-C++/Dodatkowe-materialy/Dzielenie-kodu-na-kilka-plikow-zrodlowych/310 - generalnie kurs tak sobie ale podział na pliki napisany prostym językiem.

Tyle, że w opcji środowiska przy dodawaniu nowego pliku File->New file jest dodanie samego pliku .h lub .hpp i nie ma rozdzielenia na opcie .h->.c .hpp->.cpp. Co innego w konkurencyjnym C++ Builder, tam było coś takiego jak New->Unit i przez F6 przełączało się pomiędzy .cpp, a .h. Pewnie nie mam racji, ale po co więc jest to dodawanie pliku .h w Visual C++, skoro i tak się powinno nadpisać kolejny z roszerzeniem .c lub .cpp?

1

W Visualu zakłada się że jesteś na tyle mądry aby nie korzystać ze zmiennych globalnych.

0
davout napisał(a):

Co innego w konkurencyjnym C++ Builder, tam było coś takiego jak New->Unit

Powinienem wcześniej przypuszczać, że masz formację na Javascripcie albo borlandach.
Taka precyzja wyrażania myśli nie bierze się znikąd.

_13th_Dragon napisał(a):

W Visualu zakłada się że jesteś na tyle mądry aby nie korzystać ze zmiennych globalnych.

Podziwiam talent dydaktyczny. Jak w tym beł... mało precyzyjnym opisie to wyczytałeś?

2

Opis reprodukcji jest niewystarczający. Na ten moment to wróżenie z kryształowej kuli.

We wcześniejszych wersjach czegoś takiego nie miałem.

Zapewniam Cię, że tworząc taką samą konfigurację w starszych wersjach jaką teraz masz w 2019 również miałbyś błąd.

Co innego w konkurencyjnym C++ Builder, tam było coś takiego jak New->Unit i przez F6 przełączało się pomiędzy .cpp, a .h.

W Visualu możesz dodać klasę i wtedy IDE również stworzy Ci oba pliki.

ale po co więc jest to dodawanie pliku .h w Visual C++, skoro i tak się powinno nadpisać kolejny z roszerzeniem .c lub .cpp?

Nie zawsze plik .cpp jest potrzebny, np.do definicji typów, krótkich funkcji inline, albo szablonów, ale nie zawracaj sobie tym głowy teraz. Najlepiej przewertuj jakiś kurs albo opis, jak zarządzać plikami projektu.

0

Problem okazał się trywialny. Poniekąd zawiodło moje przyzwyczajenie przy dodawaniu bibliotek do projektu w jego starszych wersjach, gdzie wystarczyło posłużyć się odpowiednim menu i ciągiem instrukcji:
Plik->Nowy->Plik nagłówka (.h). Później upewnić się, że ścieżka się zgadza i dołączyć przez "zaincludowanie" nowy plik.
W Visual 2019 z jakiegoś powodu to się nie sprawdza.
Metodyka dołączania własnej biblioteki wygląda następująco:
Projekt->Dodaj nowy element->Plik nagłowka (.h)
W takim pliku jak najbardziej można przechowywać wszystko globalnie, od zmiennych po struktury i klasy. Całość widoczna dla projektu i jego modułów.

0

Taka ciekawostka. Jeżeli dołącza się nagłówek do projektu, to nie można zadeklarować w nim tablic statycznych i dynamicznych, oraz tzw uchwytów, które związane są z C++/CLI. Nie jest to większym problemem bo wszystkie takie obiekty można zadeklarować w głównym projekcie pod sekcją - #pragma endregion.
Błąd środowiska dla deklaracji w dołączonej bibliotece dla zamieszczonych przykładowych zmiennych C++//CLI

array<int>^tabela;
array<int,2>^tabela;
Array^ tabela;
array<System::Int32>^ tabela;
array<System::Int32,2>^ tabela

jest zawsze taki sam:
zmienna ze statycznym okresem magazynu nie może mieć typu śledzącego ani do odwołania do dojscia

naturalnie w nagłówkach pozostaje możiwość "tradycyjnych" deklaracji:

int tab[x];
int tab[x][x];
int* tab;
int** tab;

0
davout napisał(a):

naturalnie w nagłówkach pozostaje możiwość "tradycyjnych" deklaracji:

int tab[x];
int tab[x][x];
int* tab;
int** tab;

Panie, przebacz im, bo nie wiedzą co czynią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1