Dostępność zmiennych po podzieleniu kodu na pliki.

0

Robię projekt, mam podzielony kod na kilka plików .h i .cpp.
Stworzyłem sobie własny typ enum np.

enum nazwa{..}

, po czym tablicę nazwa tablica[10][10]

. Robię to w pliku .cpp z mainem, czyli głównym. W pozostałych plikach mam funkcje, które mają korzystać z tej tablicy. Jak mam zrobić, żeby funkcje w innych plikach widziały tą samą tablicę, i żebym mógł przekazywać ją przez wskaźnik i działać na niej?
1

Najlepiej wcale, zmienne globalne to zło. Poczytaj też ostatni wątek o tablicach, aby dowiedzieć się dlaczego tablice wielowymiarowe są problematyczne.

Jeśli już musisz - musisz je zadeklarować w pliku nagłówkowym.

0

Ale w jaki sposób? Kilkakrotnie? w kazdym pliku? używając extern?

1

Od tego masz pliki nagłówkowe, aby zapisywać deklarację raz. Ale tak jak pisałem, zmienne globalne to bardzo zły pomysł i nie musisz go używać.

0

W pliku nazwa.hpp. Wtedy tablica będzie znana we wszystkich plikach *.cpp, w których dołączony będzie plik *.hpp

0

Czyli wszystkie zmienne które chce żeby były widoczne w jakichś funkcjach, które są w innym pliku, po prostu deklarowac globalnie, w oddzielnym pliku .h tak?
A da się tak, że po prostu byłaby ona tylko w mainie dostępna, a w tych funkcjach operowałbym tylko na wskaźniku, który bym do tej funkcji przekazywał?

1

A da się tak, że po prostu byłaby ona tylko w mainie dostępna, a w tych funkcjach operowałbym tylko na wskaźniku, który bym do tej funkcji przekazywał?

Tak, da się i tak powinieneś robić! Zmienne globalne to (prawie) nigdy nie jest rozwiązanie.

0

Dzielenie kodu na kilka plików
Pewnie można, ale trzeba robić to z głową. Najlepiej wszystko co tylko jest możliwe przekazywać w argumentach funkcji. I basta.

0

Tak też zawsze robię, jednak tutaj mam ten kłopot dlatego, że dzielę kod na kilka plików, i po prostu tego co zadeklarowałem w mainie (enum nazwa i nazwa tablica[10][10]) mi po prostu nie widzi w funkcji, w innym pliku, nie mogę nawet w deklaracji funkcji wpisać wskaźnika do tego.

0

Przecież program rusza od funkcji głównej main() i w niej wywołujesz pierwszą funkcję. Pomyśl, czy da się jakoś ją przekazywać aby była widoczna w funkcjach, w których jest potrzebna.

0

No właśnie nic nie wymyśliłem :/

0
 enum nazwa{..}
// po czym tablicę
nazwa tablica[10][10]

Czy ta tablica ma typ enum'a? Co w niej będzie zapisane?

2
//plik moje_def_zmiennych.h
typedef enum nazwa = { ostatnim = 0, bedzie, pierwszy };
extern nazwa tablica[10][10];
 

Lub

//plik moje_def_zmiennych.h
extern enum nazwa = {};
extern enum nazwa tablica[10][10];
 

Bez typedef nie możesz zadeklarować nazwa tablica; Bez extern tworzysz obiekt(kopie) a nie deklaracje.
Jeśli wpiszesz wersje 1. to:

//plik Unit1.c
#include "moje_def_zmiennych.h"

void func1()
{
tablica[y][x] = pierwszy;
}
//plik Unit2.c
#include "moje_def_zmiennych.h"

void func2()
{
tablica[y][x] = bedzie;
}
//plik UnitX.c
#include "moje_def_zmiennych.h"

static enum nazwa tablica[10][10];

void funcX()
{
tablica[y][x] = ostatnim;
}

lub osobno...

//plik zmienne_globalne.c
#include "moje_def_zmiennych.h"
static nazwa tablica[10][10];
//+ Jakieś superduper inne..
1

I jeszcze coś prostszego:

//header.hpp
#pragma once

enum class Any_name {first, between, last};

void func(Any_name arr[], int size); 
// decl.cpp
 #include "header.hpp"
#include <iostream>

void func(Any_name arr[], int size)
{
	std::cout << static_cast<int>(arr[0]) << std::endl;
	std::cout << static_cast<int>(arr[1]) << std::endl;
}
//main.cpp
#include <iostream>
#include "header.hpp"

int main()
{
	Any_name arr[2]	{
		{Any_name::first},
		{Any_name::last}
	};

	func(arr, 2);
}
0

mam więc tak

 
//plik typy_danych.h
#pragma once

enum kulka { wart1, wart2};
//plik funkcja.cpp

wypisz(kulka **tab)
{
//wypisanie tablicy
}

no i w mainie

 
kulka plansza[9][9] = { wart1 };
//TO PONIZEJ NIE DZIAŁA
wypisz(plansza);

co muszę zmienić?

1

Zrozumienie wskaźników. Wskaźnik na wskaźnik/tablica wskaźników/tablica tablic to nie jest tablica dwuwymiarowa.

0

Nazwa tablicy to wskaźnik.

3

Nazwa tablicy to nazwa tablicy.

void wypisz(kulka (*tab)[9])
0

Dzięki @kq działa wszystko, nie miałem podpiętej deklaracji enum kulka do .h z funkcją.

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