У меня есть вопрос, который я не могу понять, как довольно новый для c ++.У меня есть класс, в котором набор переменных объявляется в файле .h, а затем инициализируется в файле .cpp.Эти же переменные используются набором из 3 других классов - и компилятор выводит их из области видимости.Я не уверен, как связать классы, чтобы переменные были видны всем классам.Сам код является портом из языка Java.Я использую openFrameworks в качестве среды разработки, и я разместил там свои ошибки компилятора, если будет полезно посмотреть http://www.openframeworks.cc/forum/viewtopic.php?f=8&t=4505
smoke.h
#pragma once
#ifndef SMOKE
#define SMOKE
#include "ofMain.h"
#include "VSquare.h"
#include "VBuffer.h"
#include "Particle.h"
#define LWIDTH 151
#define LHEIGHT 11
class Smoke {
public:
int WIDTH;
int HEIGHT;
int RES;
int PENSIZE;
int PNUM;
VSquare v [LWIDTH] [LHEIGHT] ;
VBuffer vbuf [LHEIGHT][LHEIGHT] ;
Particle p [30000];
int pcount;
int mouseXvel;
int mouseYvel;
int randomGust;
int randomGustMax;
float randomGustX;
float randomGustY;
float randomGustSize;
float randomGustXvel;
float randomGustYvel;
Smoke();
void init();
void draw();
};
#endif
Код в моем файле .cpp выглядит следующим образом:
#include "Smoke.h"
Smoke::Smoke(){
WIDTH = 300; //these are the variables that go out of scope in all other classes
HEIGHT = 300;
RES = 2;
PENSIZE = 30;
PNUM = 30000;
pcount = 0;
mouseXvel = 0;
mouseYvel = 0;
randomGust = 0;
}
и один из классов, с которыми у меня возникла проблема:
Particle.h
#ifndef PARTICLE
#define PARTICLE
#include "ofMain.h"
class Particle{
public:
float x;
float y;
float xvel;
float yvel;
float temp;
int pos;
Particle(float xIn = 0, float yIn = 0);
void reposition();
void updatepos();
};
#endif
и файл .cpp, в который выдается ошибка (отрывок):
#include "Particle.h"
Particle::Particle(float xIn, float yIn){
x = xIn;
y = yIn;
}
void Particle::reposition() {
x = WIDTH/2+ofRandom(-20,20); //eg, WIDTH and HEIGHT not declared in this scope
y = ofRandom(HEIGHT-10,HEIGHT);
xvel = ofRandom(-1,1);
yvel = ofRandom(-1,1);
}
void Particle::updatepos() {
int vi = (int)(x/RES); //RES also not declared in this scope
int vu = (int)(y/RES);
if(vi > 0 && vi < LWIDTH && vu > 0 && vu < LHEIGHT) {
v[vi][vu].addcolour(2);
//and so on...
Действительно надеюсь, что это то, что люди могут помочь мне разобраться!Большое спасибо