После получения справки по этому вопросу меня заставили лучше отладить. В этом процессе я обнаружил, что моя проблема заключается в следующем:
При работе в C ++ попытка установить переменную-член класса в значение работает, но не во время цикла. Я сократил свой код (чтобы следовать) до того, что, по моему мнению, является самым простым, поскольку оно все еще вызывает ошибку.
Вызов функции класса Mover, которая изменяет переменную pMovXPOS, которая затем может быть получена как обновленная в той же области (в той же функции) и из того места, где она была вызвана (в цикле). Однако после зацикливания кажется, что переменная сбрасывается в исходное значение.
Я публикую здесь полный код теста. Проблема заключается в функции RunWorld () файла Main-test.cpp. Если вы скомпилируете и запустите, вы должны увидеть вывод, который показывает изменение переменной, а затем ее сброс.
Это проблема области? Вопрос строительства / разрушения? Проблема с указателем / ссылкой? Я не уверен, с чего начать (кроме лучшей отладки).
(Поскольку я новичок в C ++, я уверен, что есть некоторые вопиющие проблемы со стилем и / или методами, которые я использовал. Если есть какие-либо серьезные не-но, пожалуйста, не стесняйтесь указывать на них.)
Заранее спасибо за любую помощь!
//Main-Test.cpp
#include "Globals-Test.h"
#include "Mover-Test.h"
std::vector < Mover > AllMovers;
long SysCounter;
Mover CreateNewMover() {
Mover TempMover;
TempMover.setXPOS(5);
TempMover.setYPOS(10);
return TempMover;
}
void RunWorld() {
Mover TempMover;
unsigned int iMoverLoop;
srand ( time(NULL) );
AllMovers.push_back(CreateNewMover());
for (SysCounter = 0; SysCounter <= 50; SysCounter++) {
for (iMoverLoop = 0; iMoverLoop < AllMovers.size(); iMoverLoop++) {
std::cout << "Loop #:" << SysCounter << std::endl;
TempMover = AllMovers.at(iMoverLoop);
std::cout << "Is: " << TempMover.getXPOS() << std::endl;
TempMover.DoMove();
std::cout << "Is: " << TempMover.getXPOS() << std::endl;
}
}
}
int main() {
RunWorld();
return 0;
}
//Globals-Test.h
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <sstream>
#include <unistd.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <vector>
#include <time.h>
#include <fstream>
//Mover-Test.h
extern long MoverIndex;
class Mover {
private:
int pMovXPOS;
int pMovYPOS;
public:
int getXPOS();
void setXPOS(int newXPOS);
int getYPOS();
void setYPOS(int newYPOS);
Mover();
~Mover();
void DoMove();
};
//Mover-Test.cpp
#include "Globals-Test.h"
#include "Mover-Test.h"
Mover::Mover() {
}
Mover::~Mover() {
}
int Mover::getXPOS() {
return pMovXPOS;
}
void Mover::setXPOS(int newXPOS) {
pMovXPOS = newXPOS;
}
int Mover::getYPOS() {
return pMovYPOS;
}
void Mover::setYPOS(int newYPOS) {
pMovYPOS = newYPOS;
}
void Mover::DoMove() {
pMovXPOS = pMovXPOS + 1;
pMovYPOS = pMovYPOS + 1;
}
//Compiled with:
g++ -Wall -lm -c Main-Test.cpp
g++ -Wall -lm -c Mover-Test.cpp
g++ -Wall Mover-Test.o Main-Test.o -o world-test.exe -lm