Trouble with C & Code Blocks : Error with debug called 'error: ld returned 1 exit status'
Trouble with C & Code Blocks : Error with debug called 'error: ld returned 1 exit status'
我花了一整天的时间来修复代码块,我遇到了很多麻烦。
似乎是固定的,我决定编码,我试图显示一个托盘(二维数组)作为函数的参数。
我遵循本网站上的答案以使其正确。但是现在,我编译时出错了。
这是我的文件。
main.c
#include <stdio.h>
#include <stdlib.h>
#include "SudokuH.h"
int main(void)
{
int tray[9][9]={};
displayTray(numRows, numCols, tray);
return 0;
}
SudokuH.h
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
int numRows = 9;
int numCols = 9;
int i,j;
void displayTray (int numRows, int numCols, int pt[][numCols]);
#endif // SUDOKUH_H_INCLUDED
SudokuS.c
#include <stdio.h>
#include <stdlib.h>
#include "SudokuH.h"
void displayTray(int numRows, int numCols, int pt[][numCols]){
printf("A|B|C|D|E|F|G|H|I\n");
for (i=0; i<numRows;i++){
printf("%d|",i);
for (j=0; j<numCols;j++){
printf("%i|",pt[i][j]);
}
}
}
一开始,我以为这个错误来自CodeBlocks,但我尝试在没有创建项目的情况下再次制作,但没有成功。我的其他程序似乎有效。
那么我的代码有什么问题呢?我检查了我的参数,但它似乎没问题,所以也许这是我使用二维数组作为参数的方式?
错误是:
||=== Build: Debug in Sudoku (compiler: GNU GCC Compiler) ===|
||error: ld returned 1 exit status| ||=== Build failed: 1 error(s), 0
warning(s) (0 minute(s), 0 second(s)) ===|
我在构建日志中有这个:
obj\Debug\main.o:main.c:(.data+0x0): first defined here
obj\Debug\SudokuS.o:SudokuS.c:(.data+0x4): multiple definition of
`numCols' obj\Debug\main.o:main.c:(.data+0x4): first defined here
collect2.exe: error: ld returned 1 exit status
这个header文件
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
int numRows = 9;
int numCols = 9;
int i,j;
void displayTray (int numRows, int numCols, int pt[][numCols]);
#endif // SUDOKUH_H_INCLUDED
包含 objects numRows
和 numCols
的定义。因此,这些 objects 将定义与编译单元中包含的 header 一样多的时间。
因此objects具有相同名称和外部链接的将被定义多次
要避免错误,您可以使用内部链接声明 objects。例如
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
static const int numRows = 9;
static const int numCols = 9;
void displayTray (int numRows, int numCols, int pt[][numCols]);
#endif // SUDOKUH_H_INCLUDED
您还应该从 header 定义中排除
int i,j;
尽管有一个暂定的定义是可能的。
以下代码:
- 没有 'magic' 个号码
- 在
display()
函数中,修复了'header'行的显示
- 大大减少了
display()
函数的参数数量
- 干净地编译
- 在处理只会 >= 0 的数字时使用无符号变量
- 为简洁起见,将所有内容都塞进了一个文件
- 没有在头文件中定义变量实例
- 不#include不使用的头文件
- 正确初始化
tray[][]
数组
- 更正
display()
函数以输出由换行符分隔的行
现在是代码
#include <stdio.h>
//SudokuH.h
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
#define NUM_ROWS (9)
#define NUM_COLS (9)
void displayTray (int pt[][ NUM_COLS ]);
#endif // SUDOKUH_H_INCLUDED
//#include "SudokuH.h"
int main(void)
{
int tray[ NUM_ROWS ][ NUM_COLS ]={{ 0 }};
displayTray(tray);
return 0;
}
//SudokuS.c
#include <stdio.h>
//#include "SudokuH.h"
void displayTray(int pt[][ NUM_COLS ])
{
printf(" |A|B|C|D|E|F|G|H|I|\n");
for (size_t i=0; i<NUM_ROWS; i++)
{
printf("%lu|",i);
for (size_t j=0; j<NUM_COLS; j++)
{
printf("%i|", pt[i][j]);
}
printf( "\n");
}
}
输出如下:
|A|B|C|D|E|F|G|H|I|
0|0|0|0|0|0|0|0|0|0|
1|0|0|0|0|0|0|0|0|0|
2|0|0|0|0|0|0|0|0|0|
3|0|0|0|0|0|0|0|0|0|
4|0|0|0|0|0|0|0|0|0|
5|0|0|0|0|0|0|0|0|0|
6|0|0|0|0|0|0|0|0|0|
7|0|0|0|0|0|0|0|0|0|
8|0|0|0|0|0|0|0|0|0|
我花了一整天的时间来修复代码块,我遇到了很多麻烦。 似乎是固定的,我决定编码,我试图显示一个托盘(二维数组)作为函数的参数。 我遵循本网站上的答案以使其正确。但是现在,我编译时出错了。 这是我的文件。
main.c
#include <stdio.h>
#include <stdlib.h>
#include "SudokuH.h"
int main(void)
{
int tray[9][9]={};
displayTray(numRows, numCols, tray);
return 0;
}
SudokuH.h
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
int numRows = 9;
int numCols = 9;
int i,j;
void displayTray (int numRows, int numCols, int pt[][numCols]);
#endif // SUDOKUH_H_INCLUDED
SudokuS.c
#include <stdio.h>
#include <stdlib.h>
#include "SudokuH.h"
void displayTray(int numRows, int numCols, int pt[][numCols]){
printf("A|B|C|D|E|F|G|H|I\n");
for (i=0; i<numRows;i++){
printf("%d|",i);
for (j=0; j<numCols;j++){
printf("%i|",pt[i][j]);
}
}
}
一开始,我以为这个错误来自CodeBlocks,但我尝试在没有创建项目的情况下再次制作,但没有成功。我的其他程序似乎有效。 那么我的代码有什么问题呢?我检查了我的参数,但它似乎没问题,所以也许这是我使用二维数组作为参数的方式? 错误是:
||=== Build: Debug in Sudoku (compiler: GNU GCC Compiler) ===| ||error: ld returned 1 exit status| ||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
我在构建日志中有这个:
obj\Debug\main.o:main.c:(.data+0x0): first defined here obj\Debug\SudokuS.o:SudokuS.c:(.data+0x4): multiple definition of `numCols' obj\Debug\main.o:main.c:(.data+0x4): first defined here collect2.exe: error: ld returned 1 exit status
这个header文件
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
int numRows = 9;
int numCols = 9;
int i,j;
void displayTray (int numRows, int numCols, int pt[][numCols]);
#endif // SUDOKUH_H_INCLUDED
包含 objects numRows
和 numCols
的定义。因此,这些 objects 将定义与编译单元中包含的 header 一样多的时间。
因此objects具有相同名称和外部链接的将被定义多次
要避免错误,您可以使用内部链接声明 objects。例如
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
static const int numRows = 9;
static const int numCols = 9;
void displayTray (int numRows, int numCols, int pt[][numCols]);
#endif // SUDOKUH_H_INCLUDED
您还应该从 header 定义中排除
int i,j;
尽管有一个暂定的定义是可能的。
以下代码:
- 没有 'magic' 个号码
- 在
display()
函数中,修复了'header'行的显示 - 大大减少了
display()
函数的参数数量 - 干净地编译
- 在处理只会 >= 0 的数字时使用无符号变量
- 为简洁起见,将所有内容都塞进了一个文件
- 没有在头文件中定义变量实例
- 不#include不使用的头文件
- 正确初始化
tray[][]
数组 - 更正
display()
函数以输出由换行符分隔的行
现在是代码
#include <stdio.h>
//SudokuH.h
#ifndef SUDOKUH_H_INCLUDED
#define SUDOKUH_H_INCLUDED
#define NUM_ROWS (9)
#define NUM_COLS (9)
void displayTray (int pt[][ NUM_COLS ]);
#endif // SUDOKUH_H_INCLUDED
//#include "SudokuH.h"
int main(void)
{
int tray[ NUM_ROWS ][ NUM_COLS ]={{ 0 }};
displayTray(tray);
return 0;
}
//SudokuS.c
#include <stdio.h>
//#include "SudokuH.h"
void displayTray(int pt[][ NUM_COLS ])
{
printf(" |A|B|C|D|E|F|G|H|I|\n");
for (size_t i=0; i<NUM_ROWS; i++)
{
printf("%lu|",i);
for (size_t j=0; j<NUM_COLS; j++)
{
printf("%i|", pt[i][j]);
}
printf( "\n");
}
}
输出如下:
|A|B|C|D|E|F|G|H|I|
0|0|0|0|0|0|0|0|0|0|
1|0|0|0|0|0|0|0|0|0|
2|0|0|0|0|0|0|0|0|0|
3|0|0|0|0|0|0|0|0|0|
4|0|0|0|0|0|0|0|0|0|
5|0|0|0|0|0|0|0|0|0|
6|0|0|0|0|0|0|0|0|0|
7|0|0|0|0|0|0|0|0|0|
8|0|0|0|0|0|0|0|0|0|