【问题标题】:Passing variable from function A to main and back to another将变量从函数 A 传递到 main 并返回到另一个
【发布时间】:2020-11-08 22:47:27
【问题描述】:

我有下面的例子

int main() {
    ...
}

void parameterList() {
    ...
}

void myMethodA() {
    ...
}

void myMethodB() {
    ...
}

void myMethodC() {
    ...
}

我已阅读有关此主题的几篇 StackOverflow 帖子,并了解将变量从 myMethodA() 传递到 myMethodB(),我需要在 myMethodA() 中使用变量调用 myMethodB()。说明

void parameterList() {
    ...
    int someInteger = 45;
    string someName = "John";

    int otherInteger = 20;

    myMethodB(someName, someIntegers);
    myMethodC(otherInteger);
}

void myMethodB(string &someName, int &someInteger) {
    ...
    string another_someName = someName;
    int another_someInteger = someInteger;
    ...
}

void myMethodC(int &otherInteger) {
    ...
    int another_someInteger_two = otherInteger;
    ...
}

parameterList() 是一个函数,其中包含多个 myMethod() 函数的多个变量。在初始程序运行时,parameterList() 必须首先在 main 中运行以获取所有必要的变量。理想情况下,主函数将从 parameterList() 中获取所有这些变量,并将其传递给主函数中的 myMethod()。说明

Step 1
main function will run parameterList()

Step 2
parameterList() process and have multiple variables meant for multiple myMethod()

Step 3
main function should have a variable that can "store" these variables in order to pass it to all the myMethod() for further processing

主函数不会运行 myMethodB(),直到它被告知这样做并且来自 myMethodA() 的变量在主函数中时。

非常感谢任何对此的澄清。感谢您抽出宝贵时间!

【问题讨论】:

  • 如果你不能通过引用传递或返回一些保存数据作为返回值的容器,那么你必须使用全局变量(这是一个不好的做法)
  • 上下文是什么?为什么不在 main 中初始化它们并通过引用传递给 A,而后者又通过引用传递给 B?
  • myMethodA() 被假定为一个文件,其中包含其他 myMethodN 函数的所有必要数据参数(假设有 > 5 个 myMethod - myMethodB、myMethodC 等)。每个 myMethodN 都需要来自 myMethodA() 的一些数据参数。
  • @SunnyBoiz 所以,你的意思是每个函数的数据可能不同?粗略地说,methodD() 想要var4 而不是var1var2、...?
  • 没错。如果最初的帖子不清楚,那我很糟糕。

标签: c++ parameter-passing pass-by-reference main


【解决方案1】:

将变量从函数 A 传递给 main 并返回给另一个

要从函数中传递一个值,您可以返回它。

要将值传递给函数,可以使用参数。示例:

int myMethodA() {
    int someInteger = 45;
    // ...
    return someInteger;
}

int main()
{
    int someInteger = myMethodA();
    myMethodB(someInteger);
}

如果 myMethodA() 需要返回超过 1 个变量,我认为这不会起作用

这不是问题。虽然只能返回一个对象,但该对象可以是类类型,并且类可以包含多个子对象。示例:

struct example {
    int someInteger;
    string someName;
};

example myMethodA();

void myMethodB(const example&);

如果对程序的结构有意义,这些函数可能会成为类的成员函数,例如在 KamilCuk 的 answer 中演示的。


结构可以有数组吗?

是的。类成员可以是数组。

'example myMethodA()' 是在 main 函数中吗?

这是一个返回example实例的函数声明。

我应该如何在 myMethodA() 中的 myMethodA() 中返回这些变量?

与返回其他对象的方式相同。使用return 声明。

【讨论】:

  • 因此,您尝试将整数返回给 void 函数并将返回的值分配给 main() 中的整数。这怎么可能?
  • @RohanBari 有一个错误。没有了。
  • 感谢 eeorika,如果 myMethodA() 需要返回超过 1 个变量(它将返回多个 int、string 以及可能返回一个或两个数组),我认为这不会起作用。
  • 谢谢 eeorika。我目前正在尝试您的建议,但需要了解一两件事。结构可以有数组吗? 'example myMethodA()' 是在主函数中吗?因为如果 myMethod() 由字符串、int、数组组成,我认为我不能拥有 int myMethodA()。我应该如何在 myMethodA() 中的 myMethodA() 中返回这些变量?
【解决方案2】:

您还可以使用类来包装数据并管理对象的生命周期。

class Context {
    int someInteger;
    string someName;

    Context(int a, const string& b) :
       someInteger(a),
       someName(b)
       {}

    void myMethodA() {
        /* do something with someInteger and someName */
    }

    void myMethodB() {
       /* do something with the results from myMethodA */
    }
};

int main() {
    Context ctx{45, "John"};
    ctx.myMethodA();
    ctx.myMethodB();
}

【讨论】:

    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 2021-08-14
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多