tuner.h:
#ifndef TUNER_H_INCLUDED #define TUNER_H_INCLUDED const char *texturePath[] = { "texture.png" }; #endif
main.cpp:
#include "tuner.h" #include "game.h"
game.cpp:
#include "tuner.h"
Buildausvaiheessa kääntäjä valittaa, että texturePath on määritelty useassa paikassa.
Miten minun pitäisi määritellä tämän tyyppisesti globaaleja vakioita?
Esim näin:
h.h:
// ... extern const char *tekstit[]; // ...
tekstit.c:
#include "h.h" // ei pakollinen const char *tekstit[] = { "foo", "bar", "baz" };
muu.c:
#include "h.h" // ... puts(tekstit[1]); // ...
Kiitos paljon!
On vain ikävää, että joutuu jakamaan nuo määrittelyt kahteen eri tiedostoon.
Esim:
#define OBJECT_CAR 0 #define OBJECT_TREE 1 #define OBJECT_ROCK 2 extern const char *texturePath[]; extern char *modelPath[];
const char *texturePath[] = { "car.png", "tree.png", "rock.png", }; char *modelPath[] = { "car.model", "tree.model", "rock.model", };
Onko tämä mahdollista toteuttaa järkevämmin jakamatta urleja ja OBJECT_ määrittelyjä eri tiedostoihin?
Voit korvata #define-rivit käyttämällä enum:ia. Kas näin:
#include <iostream> enum TileType { EMPTY=0, GRASS, SNOW, SAND, ROCK}; int main() { short n=SNOW; std::cout << "Tile type: "; switch(n) { case EMPTY: std::cout << "empty"; break; case GRASS: std::cout << "grass"; break; case SNOW: std::cout << "snow"; break; case SAND: std::cout << "sand"; break; case ROCK: std::cout << "rock"; break; default: std::cout << "unknown type!"; break; } std::cout << "." << std::endl; return 0; }
Google antaa hyvin ohjeita esim. tuon enumin käytöstä. Kannattaa sisälyttää tuo enum otsaketiedostoon josta sen saa aina tarjottua helposti kaikille sitä tarvitseville kooditiedostoille.
Se ei poista ongelmaa. Haluisin, että objektit määriteltäisiin samassa tiedostossa kuin polut, koska silloin niitä on helpompaa hallita.
Ymmärsin, että polkujen määrittely on järkevintä tehdä .cpp tiedostossa extern vakioilla. Jos laittaisin enumin .cpp tiedostoon, en pääsisi siihen globaalisti käsiksi projektissa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.