【问题标题】:ld returned 1 exit status error with passing parametersld 返回 1 退出状态错误并传递参数
【发布时间】:2018-02-17 23:44:02
【问题描述】:

这编译得很好。

const int NUM_PLAYERS = 10;

struct wrType
{
string name[NUM_PLAYERS];
string team[NUM_PLAYERS];
int catches[NUM_PLAYERS];
int yards[NUM_PLAYERS];
int td[NUM_PLAYERS];
double ypc[NUM_PLAYERS];
};

void populateList(wrType[], ifstream&);

int main(int args, char* argv[])
{
wrType *wide;
char select;
ifstream in;
in.open(argv[1]);

/*populateList(wrType wide, ifstream in); code causing error*/

}

void populateList(wrType wide, ifstream in)
{   
};

只要我取消注释以下代码

'populateList(wide, in);'

我收到以下错误

'ld 返回 1 个退出状态错误'

编译后。 看了很多论坛都没有解决问题。我们最近研究了结构和类,我不确定我是否误解了一个概念或如何让它发挥作用。

该代码应该通过命令行传递一个文件,然后稍后能够访问它并根据足球运动员的不同统计数据(即 10 名球员)进行冒泡排序。我不想握着我的手,这就是为什么我把剩下的留给我以后去挣扎。该代码在没有该函数的情况下可以在 main 中运行,但是一旦我尝试使用我拥有的代码调用该函数,它就会给我一个错误。

此外,当我尝试将它们作为指针传递时,它给了我一个无法将 myType* 转换为 myType

更新完整的错误:

'在函数main': (.text+0xad): undefined reference topopulateList(wrType*, std::basic_ifstream >&)' collect2: 错误: ld 返回 1 个退出状态'

编辑 2: 带有

的代码

'populateList(wrType wide, ifstream in);'

返回以下错误:

在函数'int main(int, char**)'中:

34:22:错误:“宽”之前的预期主表达式 populateList(wrType wide, ifstream in); ^ 34:37:错误:“in”populateList(wrType 宽,ifstream in)之前的预期主表达式;

【问题讨论】:

  • 1.这是您收到的唯一错误消息吗? 2. 未注释的代码应该做什么? 3. 你确定你用的是Visual C++?
  • 被注释掉的代码是否试图调用您的 populateList 函数?如果是这样的话,你想要populateList(wide, in);。您的函数说明了它期望的类型,当您调用它时,您传递了这些类型的实例。 (顺便说一下,它们不必被称为widein。不过,它们很好。)
  • 您的声明和定义不同 - 您必须修复它。链接器不会找到函数,它会认为它是不同的重载。调用函数时 - 您不只传递类型变量:populateList(wide, in);
  • 我在 ubuntu 和 g++ 上使用 gedit 进行编译。是的,注释掉的代码是我正在尝试使用的,是什么给了我错误。
  • 删除了不相关的“visual c++”标签。你用的是什么版本的g++?这应该给出编译错误,而不是链接器错误。 demo

标签: c++ c++11 c++14


【解决方案1】:

这段代码有很多问题。

  1. struct wrType
    {
    string name[NUM_PLAYERS];
    ...
    };
    

    您需要一个记录数组,而不是并行数组的记录。删除上面struct中的所有[...]

  2. wrType *wide;
    

    您需要这些结构的数组,而不是指针。

    wrType wide[NUM_PLAYERS];
    
  3. populateList(wrType wide, ifstream in);
    

    这不是正确的函数调用语法。

  4. void populateList(wrType wide, ifstream in)
    

    这与之前的声明不匹配

    void populateList(wrType[], ifstream&);
    

您需要围绕此声明构建整个程序。首先,将您的populateList 定义与该行保持一致

void populateList(wrType[] wide, ifstream& in)
{
}

然后填写正文。请注意,像

这样的行
in >> wide.name[x]; 

不再正确,您需要更改它们。

【讨论】:

  • 谢谢。它解决了这个问题。我只需要继续练习并继续阅读。我最初将它作为 wrType wide[NUM_PLAYERS];但从未将函数声明更改为 (wrType[] wide, ifstream& in)。出于某种原因,我认为输入“wrType []”是错误的。我不确定我从哪里得到这个概念。有那么一瞬间,我以为我掌握了所有 c++。我的菜鸟错误。
猜你喜欢
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 2017-08-10
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多