C++ class getter 在 main 中不返回任何值,但在 class 中返回任何值?
C++ class getter not returning any value in main, but does in the class?
我希望有人能给我指明方向,为什么我的 getter 函数在声明 setter 的函数之外使用时似乎无法正确访问它。
我正在读取一个文件,使用getline函数存储每一行的变量,然后将消息分配给Message.h.[=中的一个私有变量19=]
当我在 readfile()
函数中计算 m1.getmessage()
时,它的输出非常好,输出正确(来自我的文本文件的消息行),但是它 j ust 在 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;
}
};
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;
}
main 中的 cout 没有返回任何内容,而如果我将它转移到 m1.readfile() 中,它会完美地输出变量。
这是我第一次尝试面向对象编程,这绝对是我的弱点。在此先感谢您的任何建议。
您在 readfile 中创建了一个局部变量 m1。然后当函数结束时它被丢弃。可能您想 return 对象,或设置当前实例
在Message::readFile()
函数中,您不是在当前对象上调用函数setMessage
和setCipher
,而是在局部变量m1上调用。局部变量在函数结束时被丢弃,消息和密码最终不会被保存。您应该直接调用
setMessage(fileMessage);
setCipher(fileCipher);
getMessage();
而不是
m1.setMessage(fileMessage);
m1.setCipher(fileCipher);
m1.getMessage();
这将更新当前对象的消息和密码变量,然后您可以从 main
函数打印 getMessage()
。
您不必在 class 的成员函数中创建对象
我的建议:
- 省略/删除
readFile()
中的 Message m1;
直接调用函数
setMessage(fileMessage);
setCipher(fileCipher);
getMessage();
你可以使用这个;指向您当前正在处理的对象的指针。
如下所示。
this->setMessage(fileMessage);
或
(*this).setMessage(fileMessage);
我希望有人能给我指明方向,为什么我的 getter 函数在声明 setter 的函数之外使用时似乎无法正确访问它。
我正在读取一个文件,使用getline函数存储每一行的变量,然后将消息分配给Message.h.[=中的一个私有变量19=]
当我在 readfile()
函数中计算 m1.getmessage()
时,它的输出非常好,输出正确(来自我的文本文件的消息行),但是它 j ust 在 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;
}
};
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;
}
main 中的 cout 没有返回任何内容,而如果我将它转移到 m1.readfile() 中,它会完美地输出变量。
这是我第一次尝试面向对象编程,这绝对是我的弱点。在此先感谢您的任何建议。
您在 readfile 中创建了一个局部变量 m1。然后当函数结束时它被丢弃。可能您想 return 对象,或设置当前实例
在Message::readFile()
函数中,您不是在当前对象上调用函数setMessage
和setCipher
,而是在局部变量m1上调用。局部变量在函数结束时被丢弃,消息和密码最终不会被保存。您应该直接调用
setMessage(fileMessage);
setCipher(fileCipher);
getMessage();
而不是
m1.setMessage(fileMessage);
m1.setCipher(fileCipher);
m1.getMessage();
这将更新当前对象的消息和密码变量,然后您可以从 main
函数打印 getMessage()
。
您不必在 class 的成员函数中创建对象
我的建议:
- 省略/删除
readFile()
中的 直接调用函数
setMessage(fileMessage);
setCipher(fileCipher);
getMessage();
Message m1;
你可以使用这个;指向您当前正在处理的对象的指针。 如下所示。
this->setMessage(fileMessage);
或
(*this).setMessage(fileMessage);