gpt4 book ai didi

C++ 类 getter 在 main 中不返回任何值,但在类中返回任何值?

转载 作者:行者123 更新时间:2023-11-30 03:17:44 25 4
gpt4 key购买 nike

我希望有人能给我指明方向,为什么我的 getter 函数在声明 setter 的函数之外使用时似乎无法正确访问它。

我正在读取一个文件,使用 getline 函数存储每一行​​的变量,然后将消息分配给 Message.h 中的私有(private)变量。

当我在 readfile() 函数中调用 m1.getmessage() 时,它的输出绝对正常,输出正确(我的文本文件中的消息行), 然而它只是在 main()给出空白输出。几个小时以来,我一直在努力解决这个问题,我一直在阅读有关局部变量的信息,但据我所知,该变量已经设置,并且在公共(public)函数中,因此我看不到我哪里出错了。如果我能在凌晨 4 点拿到酒之前提供任何帮助,我们将不胜感激。

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;
}
};

消息.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;
}

main 中的 cout 没有返回任何内容,而如果我将它传输到 m1.readfile() 中,它会完美地输出变量。

这是我第一次尝试面向对象编程,这绝对是我的弱点。在此先感谢您的任何建议。

最佳答案

Message::readFile() 函数中,您不是在当前对象上调用函数 setMessagesetCipher,而是在局部变量 m1。局部变量在函数结束时被丢弃,消息和密码最终不会被保存。你应该改为调用

setMessage(fileMessage);
setCipher(fileCipher);
getMessage();

代替

m1.setMessage(fileMessage);
m1.setCipher(fileCipher);
m1.getMessage();

这将更新当前对象的消息和密码变量,然后您可以从 main 函数打印 getMessage()

关于C++ 类 getter 在 main 中不返回任何值,但在类中返回任何值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55233491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com