无法创建多个类实例?

3
我的问题是我想要创建升级类的多个实例,用于不同的升级。也许是因为我习惯使用Java,所以我不能只输入 Source first("first"), second("second"); ,因为如果我这样做并调用 first.getName(),我会得到"second"。我创建了一个示例文件,只写了我遇到困难的部分,这样你就不必试图理解我的混乱代码了。
Source.cpp:我想要这个类的多个实例。
#include "Source.h"

std::string name;

Source::Source()
{

}

Source::Source(std::string nameToSet) 
{
    name = nameToSet;
}

std::string Source::getName()
{
    return name;

Source.h

#pragma once
#include <string>
class Source {
public:
    Source();
    Source(std::string namel);
    std::string getName();
};

Test.cpp

#include "Source.h"
#include "iostream"

Source first("first"), second("second");

int main()
{
    std::cout << first.getName() << std::endl;
}

输出: second

Test.h

#pragma once
#include <string>

感谢提供示例代码。这清晰地说明了您想要做的事情,而不需要完整程序的细节。当您编译和运行此代码时会发生什么?您是否遇到任何错误?如果是,它们是什么?如果没有,您得到了什么输出?您期望得到什么输出? - Code-Apprentice
你说“我不能只是输入'Upgrade first("first"), second("second");'”。这里的“Upgrade”是什么?你希望first("first")second("second")做什么? - Code-Apprentice
2个回答

9
问题出在这一行:
std::string name;

这声明了一个名为name的全局字符串。此变量不与任何Source实例关联。相反,您需要在Source类内部声明一个字段:

class Source {
public:
    Source();
    Source(std::string namel);
    std::string getName();

// Add these two lines
private:
    std::string name;
};

这将为每个"Source"提供一个"name"。我建议你学习类成员变量以及"public"和"private"访问权限之间的区别。

谢谢您的快速回复,现在它可以工作了! - jediknightcode

1

在你的头文件中添加类似于 std::string name 的代码:

#pragma once
#include <string>
class Source {
private:
    std::string name;
public:
    Source();
    Source(std::string namel);
    std::string getName();
};

每次调用构造函数时,“name”都将被初始化为一个单一值,该值引用您特定的实例(第一,第二等)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接