从头文件中调用字符串getter函数

时间:2019-02-07 21:08:21

标签: c++ c++11

我正在学习C ++,我只是把类放在单独的文件中进行练习而已。我有一个getter函数,它返回一个string(因为该变量另存为string)。但是,从我的main()函数中,我不确定如何调用它。我知道问题可能是在调用对象时我需要在某个地方包含string,但是我不知道如何格式化它。

我知道这是一个相当新手的问题,但是我找不到任何答案。有人可以帮我吗?

(ps。我不是想让这个特定的代码正常工作,因为它没有用。我只是想学习如何将其应用于将来的参考)。

在调用或创建对象时,我曾尝试将string投掷到几个地方,但总是会出错。我知道我可以通过不封装变量或没有单独的类文件来解决它,但这不是我想要的。

main.cpp

#include <iostream>
#include "usernameclass.h"
#include <string>
using namespace std;

int main()
{
    usernameclass usernameobject;
    usernameobject.getUsername();
    return 0;
}

usernameclass.h

#ifndef USERNAMECLASS_H
#define USERNAMECLASS_H
#include <string>

class usernameclass
{
    public:
        usernameclass();
        std::string getUsername();
        void setUsername(std::string name);
        askUsername();

    private:
        std::string usernameVar = "test";
};

#endif

usernameclass.cpp

#include "usernameclass.h"
#include <iostream>
#include "username.h"
#include <string>
using namespace std;

string usernameclass::getUsername(){
    return usernameVar;
    cout << "test cout" << endl;
}

usernameclass::askUsername(){
    string name;
    cout << "What is your name?" << endl;
    cin >> name;
    setUsername(name);
    cout << "Ah, so your name is "+usernameVar+", great name I guess!" << endl;
    cin.get();
    cin.get();
    cout << "You're about to do some stuff, so get ready!" << endl;
}

usernameclass::usernameclass(){}

void usernameclass::setUsername(string name){
    string* nameptr = &usernameVar;
    *nameptr = name;
}

预期结果:运行getUsername()函数并返回usernameVar

实际结果:未运行getUsername()函数

2 个答案:

答案 0 :(得分:1)

当前代码无法编译,因为您尚未指定' askUsername ()'例程的返回类型,即' void '。

除了“ getUsername ()”中的输出(发生在该功能返回 之后并且应该已收到警告)的其他情况之外,其他情况都很好,我想。

问题:您可以在“ main ()”中以以下方式调用该“ get”方法:

cout << usernameobject.getUsername();

答案 1 :(得分:0)

您的代码的结构应更像这样:

main.cpp

#include <iostream>
#include "usernameclass.h"

int main()
{
    usernameclass usernameobject;

    // optional:
    // usernameobject.askUsername();

    // do something with usernameobject.getUsername() as needed...

    return 0;
}

usernameclass.h

#ifndef USERNAMECLASS_H
#define USERNAMECLASS_H

#include <string>

class usernameclass
{
public:
    std::string getUsername() const;
    void setUsername(std::string name);
    void askUsername();

private:
    std::string usernameVar = "test";
};

#endif

usernameclass.cpp

#include <iostream>
#include "usernameclass.h"

std::string usernameclass::getUsername() const {
    return usernameVar;
}

void usernameclass::setUsername(std::string name) {
    usernameVar = name;
}

void usernameclass::askUsername() {
    std::string name;
    std::cout << "What is your name?" << std::endl;
    std::getline(std::cin, std::name);
    setUsername(name);
    std::cout << "Ah, so your name is " << getUsername() << ", great name I guess!" << std::endl;
    std::cout << "You're about to do some stuff, so get ready!" << std::endl;
}