Я надеюсь, что кто-то может указать мне направление, почему моя функция получения не может быть доступна должным образом, когда она используется вне функции, в которой объявлен установщик.
Я читаю в файле, сохраняю переменные каждой строки, используя функцию getline, а затем присваиваю сообщение частной переменной в Message.h .
Когда я набираю m1.getmessage()
в функции readfile()
, она выводит абсолютно нормально, с правильным выводом (строка сообщения из моего текстового файла), однако это j только дает пустой вывод in main()
. Я пытался разобраться с этим уже несколько часов, я читал о локальных переменных, но насколько я вижу, переменная уже установлена, и в публичной функции, поэтому я не вижу где я иду не так. Любая помощь будет очень признателен, прежде чем я доберусь до вина в 4 часа утра. * 10101 *
Message.h
#include <iostream>
class Message {
private:
std::string message;
std::string cipher;
public:
void readFile();
void setMessage(std::string msg) {
message = msg;
}
void setCipher(std::string ciph) {
cipher = ciph;
}
std::string getMessage() {
return message;
}
std::string getCipher() {
return cipher;
}
};
message.cpp
#include "Message.h"
#include <fstream>
#include <iostream>
void Message::readFile() {
std::string fileUsername;
std::string fileForename;
std::string fileSurname;
std::string fileAge;
std::string fileTime;
std::string fileHour;
std::string fileMin;
std::string fileSec;
std::string fileCipher;
std::string fileMessage;
Message m1;
std::fstream file;
std::string filename;
std::cout << "Please enter file name: " << std::endl;
getline(std::cin, filename);
file.open(filename);
if (file.is_open()) {
std::cout << "File opened" << std::endl;
} else {
std::cout << "Wrong file name" << std::endl;
}
while(file.is_open()) {
getline(file, fileUsername);
getline(file, fileForename);
getline(file, fileSurname);
getline(file, fileAge);
getline(file, fileHour, ':');
getline(file, fileMin, ':');
getline(file, fileSec);
getline(file, fileCipher);
getline(file, fileMessage);
file.close();
}
m1.setMessage(fileMessage);
m1.setCipher(fileCipher);
m1.getMessage();
};
main.cpp
#include <iostream>
#include <iomanip>
#include <fstream>
#include "Message.h"
#include "Caesar.h"
#include "XOR.h"
int main() {
Message m1;
m1.readFile();
std::cout << m1.getMessage();
return 0;
}
Cout в main ничего не возвращает, тогда как если я перенесу его в m1.readfile (), он отлично выведет переменную.
Это моя первая попытка объектно-ориентированного программирования, и это определенно мое слабое место. Заранее спасибо за любой совет.