2012-10-12 5 views
1

Назначение говорит: Напишите программу, состоящую из двух исходных файлов. Первая (Main.c) содержит функцию main() и дает переменную i значение. Второй исходный файл (Print.c) умножает i на 2 и печатает его. Print.c содержит функцию print(), которую можно вызвать из main().Неопределенная ссылка на 'print (int)' [Ошибка компоновщика]

В моей попытке сделать это задание, я создал три файла: main.cpp

#include <stdio.h> 
#include "print.h" 
using namespace std; 

// Ex 1-5-3 

// Global variable 
int i = 2; 


int main() { 
    print(i); 

    return 0; 
} 

print.cpp:

#include <stdio.h> 
#include "print.h" 
using namespace std; 

// Ex 1-5-3 

// Fetch global variable from main.cpp 
extern int i; 

void print(int i) { 
    printf("%d", 2*i); 
} 

print.h:

#ifndef GLOBAL_H // head guards 
#define GLOBAL_H 

void print(int i); 

#endif 

Я скомпилировал print.cpp, и когда я попытался скомпилировать и запустить main.cpp, он говорит: [L inker error] undefined ссылка на 'print (int)'

Почему он не принимает мое определение void print (int i) в print.cpp и ссылается на него через заголовок print.h? Благодаря!

+1

Как вы связь? Это может быть так же просто, как забыть связать в print.o. –

+1

Вам не нужен 'extern', так как параметр' i' является параметром. –

+0

Цените помощь, все! – JZL

ответ

2

Не уверен, что компилятор вы используете, но я получил его работать на Linux/GCC:

$ gcc main.cpp print.cpp -o test 
$ ./test 
$ 4 
$ 
Смежные вопросы