奇怪的编译错误c ++“undefined reference”& “重定位被截断”

时间:2013-12-14 05:14:15

标签: c++ arrays compiler-construction reference undefined

这里是我的代码它非常简单到底所有它要做的是提示用户输入两个2d数组的大小然后输入条目和多个结果,就像它们是数学矩阵一样。该程序还远没有完成,但我喜欢编译这些小程序,因为我去看看所有部分是否正常工作。当我编译这段代码时,我得到了这个奇怪的错误。请注意,当我来到C ++以及一般编码时,我是一个非常初学者。

$ g++ matrix.C -omatrixs -lm
/tmp/ccUDYTb1.o:matrix.C:(.text+0x266): undefined reference to `Matrixsettings(int, int, int, int)'
/tmp/ccUDYTb1.o:matrix.C:(.text+0x266): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `Matrixsettings(int, int, int, int)'
/usr/lib/gcc/x86_64-pc-cygwin/4.8.1/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccUDYTb1.o: bad reloc address 0x1c in section `.xdata'
collect2: error: ld returned 1 exit status

我正在使用带有gnu编译器和notepad ++的cygwin 64bit来编译和编写它。

#include <iostream>
#include <cmath>
using namespace std;
//Prototypes
double Matrixsettings(int, int, int, int);

int main()
{
    int a=2, b=2, c=2, d=2;
    int m1 [a] [b], m2 [c] [d];
    cout<<  Matrixsettings( a,b,c,d);
    cout<< a<<b<<c<<d;
return 0;
}

double Matrixsettings( int &a, int &b,  int &c, int &d)
{ 
cout<< "how many rows in the first matrix: ";
cin>> a;
cout<< "how many columns in the first matrix: ";
cin>> b;
cout<< "how many rows in the second matrix: ";
cin>> c;
cout<< "how many columns in the second matrix: ";
cin>> d;
return 0;
}

2 个答案:

答案 0 :(得分:2)

这是不正确的:

double Matrixsettings(int, int, int, int);

您拥有的实际功能的正确原型是:

double Matrixsettings(int&, int&, int&, int&);

您希望修复原型而不是函数,因为您的函数实际上会写入其参数abcd

错误消息表明编译器调用了您在原型中声明的函数(因为它与您给出的参数匹配),但是链接器找不到与名称Matrixsettings匹配的函数但是拿了四个int个参数(不是int&)。

“截断的重定位”错误只是第一个错误的结果 - 类别的级联错误。修复第一个错误将修复这两个错误。

答案 1 :(得分:1)

首先你说Matrixsettings需要四个整数,然后你说它需要四个整数引用。你需要选择一个并坚持下去。

变化:

double Matrixsettings(int, int, int, int);

为:

double Matrixsettings(int&, int&, int&, int&);