Xcode链接器命令以1的退出码失败 c++

7

我写了一系列简单的函数。当我尝试调用最后一个函数时,出现了“链接器命令”错误。语法是正确的,但我的程序无法编译。我是否漏掉了什么或者这是一个IDE的问题?

    #include <iostream>
    #include <cstdlib>
    #include <ctime> 
    #include <time.h>

    using namespace std;


    // Function Prototypes
    int   numGen   ();
    int   questSol ();
    int   questAns ();


int main() {

// Store values of functions in variables
    int ans = questAns();
    int sol = questSol();


    if (ans == sol){
        cout << "Very good! Press Y to continue" << endl;
        questAns();
    } else {
        cout << "Incorrect. Please try again" << endl;
        cin >> ans;
        if(ans == sol){
            questAns();
        }
    }


    return 0;

};

//Generates two random numbers between zero and ten and returns those numbers
int numGen () {

    srand(time(0));
    int one = rand() % 10;
    int two = rand() % 10;

    return one;
    return two;
};

//Takes in the random numbers, multiplies them, and returns that result


int questSol (int one, int two) {


    int solution = one * two;


    return solution;
}


//Takes in random numbers, displays them in cout statement as question, receives and returns user answer to
//question


int questAns (int one, int two) {

    int answer;

    cout << "How much is " << one << " times " << two << "? \n";
    cin >> answer;


    return answer;
}
2个回答

4

您可以使用前向声明来声明一个函数:

int   questAns ();

然后稍后定义一个带有签名的函数:

int questAns (int one, int two);

C++中,函数可以有相同的名称但具有不同的参数(重载函数),因此您从未实际定义过questAns并尝试调用它。

注意:questSol也有同样的问题。

看起来您并不完全理解局部变量的范围。

在numGen内,您定义了两个整数one和two。在块(花括号:{})中定义的变量仅存在于该块内。它们是局部的。标识符仅在其定义的最内层块中有效,并且一旦退出该块,该内存就被释放。像您正在尝试的返回两个整数也是不可能的。

看起来您希望这些整数对其他两个函数可用。

最小的更改是将int one和two变为全局变量。这意味着您在任何块外定义它们(通常在代码顶部)。然后从函数定义中删除参数列表,因为所有函数都可以看到全局变量。通常认为这是不好的编程实践,因为在更复杂的程序中,全局变量会破坏您的代码,但在这个简单的程序中,它可以工作并让您有机会练习理解变量范围。

另一个解决方案,更符合您的要求,是定义一个包含两个整数的数组,并返回该数组。然后将该数组传递给另外两个函数。这将是更好的方法,并让您有机会学习数组。


现在我对这个应该如何工作感到困惑。全局变量是完美的选择,但是它们在这个练习中不被允许。数组还没有被涉及到。原始任务要求我在应用程序开始时调用一个函数,以及在用户回答正确后再次调用该函数。然后我需要在循环中使用这些值,为正确的响应生成一个问题或等待用户回答正确。 - ace7
这个旧答案对我帮助很大!一个热门提示是,确保你的函数名和参数类型匹配! - Fattie

0
你有几个问题: < p > numGen - 你不能以这种方式返回两个不同的值

// Function Prototypes
int   numGen   ();
int   questSol ();
int   questAns ();

说明你有3个函数,它们都返回一个int,并且被调用时没有参数 - 这就是你调用它们的方式。

因此,链接器正在寻找指纹为int_questSol_voidint_questAns_void的函数 - 然后你声明了两个函数,它们返回一个int,并且以3个int作为输入 - 这些函数的指纹为int_questAns_int_intint_questSol_int_int

因此,链接器抱怨说你在调用它找不到的函数。


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