ошибки компилятора — Компиляция программы на C ++ с заголовками (новичок)

Я изучаю C ++ из C ++ Эдварда Шнайнермана для математиков. Я работаю над разделом наибольших общих делителей в главе 2. Я сделал три файла:

gcd.h

#ifndef GCD_H
#define GCD_H

long gcd(long a, long b);

#endif

gcd.cc

#include "gcd.h"#include<iostream>

using namespace std;

long gcd(long a, long b) {
if( a == 0 && b == 0 ) {
cerr << "WARNING: gcd(0,0) not defined" << endl;
return 0;
}

if( a < 0 ) a = -a;
if( b < 0 ) b = -b;

if( b == 0 ) retrun a;
if( a == 0 ) return b;

long c = a % b;

return gcd(b,c);
}

и gcdtest.cc

#include "gcd.h"#include <iostream>

using namespace std;

int main() {
long a,b;

cout << "Enter the first number > ";
cin >> a;
cout << "Enter the second number > ";
cin >> b;

long d = gcd(a,b);

cout << "The gcd of " << a << " and " << b << " is " << d << endl;

return 0;
}

Все эти файлы находятся в одном каталоге. Когда я пытаюсь скомпилировать gcdtest.cc

$ g++ -Wall gcdtest.cc -o gcdtest.exe

Я получаю следующую ошибку:

$ g++ -Wall gcdtest.cc -o gcdtest.exe
Undefined symbols for architecture x86_64:
"gcd(long, long)", referenced from:
_main in ccgbCyQO.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Я новичок в C ++ и до сих пор не понял, что такое компиляция и компоновка. Что я делаю неправильно?

3

Решение

Вы должны попытаться скомпилировать оба файла C:

$ g++ -Wall gcdtest.cc gcd.cc -o gcdtest.exe

В противном случае вы объявили gcd (в вашем заголовочном файле), но компилятору не хватает его реализации.

5

Другие решения

Скомпилируйте вашу программу так:

g++ -Wall gcd.cc gcdtest.cc -o gcdtest.exe

Или так:

g++ -Wall -c gcdtest.cc
g++ -Wall -c gcd.cc
g++ -Wall gcd.o gcdtest.o -o gcdtest.exe
2

Вы должны сначала скомпилировать gcd.cc.

$g++ -c gcd.cc -o gcd.o
$g++ gcdtest.cc gcd.o -o gcdtest.exe
0
По вопросам рекламы [email protected]