【问题标题】:Access data member of a member function from one class to another class's member function从一个类访问成员函数的数据成员到另一个类的成员函数
【发布时间】:2022-01-10 11:33:22
【问题描述】:

当我运行它给出的代码时

    error: 'passArray' was not declared in this scope
    cout << passArray[2];
            ^~~~~~~~~

所以我想访问该字符数组并修改该数组。例如用户输入是last(在string p) 那么它将被转换成字符数组(passArray)。然后void convert()函数应该将passArray[0](字母l)修改为字母f,并将输出作为fast。像这样,我想一次将多个字母修改为 l to fa to es to lt to t 最终单词将是 felt 来自单词 last

代码如下:

#include <bits/stdc++.h>
using namespace std;

class PasswordConverter {
protected:
    string p;
    int length;
public:
    void getPassword() {
        cout << "Enter password to convert into strong one: ";
        cin >> p;
        length = p.length();
    }
    void show() {
        cout << p << endl;
        cout << length << endl;
    }
};
class strToarr : public PasswordConverter {
public:
    void typeCast() {
        char passArray[length + 1];
        strcpy(passArray, p.c_str());
    }
};
class Convert : public strToarr {
public:
    void convert() {
        cout << passArray[2];
    }
};
int main(int argc, char const *argv[]) {
    Convert strong;
    strong.getPassword();
    strong.show();
    strong.typeCast();
    strong.convert();
    return 0;
}

【问题讨论】:

  • 我不明白,passArray 是一个局部变量,convert 运行时它不存在。没有成员函数的数据成员这样的东西。另外passArray[length + 1]; 不是有效的 C++,VLA 不是标准的,只需使用std::vector
  • @Quimby 是的,你是对的 passArray 是一个局部变量,我怎样才能使全局变量?和passArray[length +1] 这是我从GeeksforGeeks 方法1 复制的
  • @VoraArshit 我反对全球。我不明白ConvertstrToarr 类的目的是什么,你能不能只拥有返回结果的独立函数typeCastconvert?我认为不需要对象...哦,不幸的是那里的代码也不正确,大小必须是编译时常量,可变长度数组(VLA)只是GCC的扩展,不是标准的.
  • @Quimby 我不太懂 c++。 strToarr 的目的是将字符串 p 转换为字符数组 passArry,而 `Convert 的目的是修改字符串,正如我在这个问题中所说的那样。我不知道什么是独立函数。
  • @VoraArshit 没有类的函数,我添加了一个答案,我将如何编写这样的代码。

标签: c++ arrays


【解决方案1】:

我已尝试修复和简化代码。我相信不需要任何类,只需使用普通函数保持简单即可。

另外请注意,std::string 已经有 operator[],所以不需要额外的数组来编辑字符串,但如果你需要,我会保留它。

// Do NOT use this, don't be lazy and include the proper headers
//#include <bits/stdc++.h>
#include <iostream>
#include <string>
#include <vector>
// Also do not use this, at least not in headers
//using namespace std;


std::string getPassword() {
    std::string p;
    std::cout << "Enter password to convert into strong one: ";
    std::cin >> p;
    return p;
}

void show_password(const std::string& password) {
    // Do not use 'endl' for newlines, sadly it also flushes the buffer 
    // making it slow.
    std::cout << password << '\n';
    std::cout << password.size() << '\n';
}
std::vector<char> typeCast(const std::string& p) {
    auto begin = p.c_str();
    std::vector<char> p_array{begin,begin+p.size()+1};
    return p_array;
}

void convert(const std::vector<char>& passArray) {
    std::cout << passArray[2];
}

int main(int argc, char const *argv[]) {
    auto pass = getPassword();
    show_password(pass);
    auto pass_array = typeCast(pass);
    convert(pass_array);
    return 0;
}

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多