2017-06-10 14 views
1

私はここにいるので、皆さんを助けてくれることを願っています。私はC++プロジェクトでターミナル(Mac OS)でコンパイルしようとしていますが、.cppをインクルードするときにはエラーが発生します。gcc 4.7.4リンクの問題:未定義のアーキテクチャのシンボルx86_64

私は、問題をより明確に見るために、メインで最も簡単な例を作りました。

これらは私のファイルです:

main.cppに

#include "Point.hpp" 

int main(){ 
    Point p1; 
} 

Point.hpp

#ifndef Point_hpp 
#define Point_hpp 

#include <math.h> 
#include <iostream> 
#include <stdio.h> 

class Point{ 
private: 
    double dX; 
    double dY; 

public: 
    Point(); 
    Point(double dX, double dY); 

    void setX(double dX); 
    double getX(); 
    void setY(double dY); 
    double getY(); 

    double getDistance(Point p); 

    void move(double dDespX, double dDespY); 

    void display(); 
}; 

#endif 

Point.cpp

#include "Point.hpp" 

Point::Point(){ 
    dX = 0; 
    dY = 0; 
} 

Point::Point(double dX, double dY){ 
    this -> dX = dX; 
    this -> dY = dY; 
} 

void Point::setX(double dX){ 
    this -> dX = dX; 
} 

double Point::getX(){ 
    return dX; 
} 

void Point::setY(double dY){ 
    this -> dY = dY; 
} 

double Point::getY(){ 
    return dY; 
} 

double Point::getDistance(Point p){ 
    double dDist; 
    dDist = sqrt(pow(p.dX - dX, 2) + pow(p.dY - dY, 2)); 
    return dDist; 
} 

void Point::move(double dDespX, double dDespY){ 
    dX += dDespX; 
    dY += dDespY; 
} 

void Point::display(){ 
    std::cout << "Point = (" << dX << "," << dY <<")" << std::endl; 
} 

私は(「メインmake」を使用して)コンパイルしようと、私は、端末からこれを取得しています:

$ make main 
c++  main.cpp -o main 
Undefined symbols for architecture x86_64: 
    "Point::Point()", referenced from: 
     _main in ccVzh5gg.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 
make: *** [main] Error 1 
+1

MakeファイルにPoint.cppを追加すると、コンパイルの問題が解決するはずです。 –

答えて

0

あなたがメイクファイルにコンパイルとリンクファイルのリストにPoint.cppを追加する必要があります。あなたが実行可能にPoint.cppファイルから定義をリンクしないのでだから、あなただけの彼らの宣言(パラメータを知っていると値を返しますがPoint.cppで提供される機能にアクセスすることはできません

c++  main.cpp Point.cpp -o main 

にコンパイル行を変更)コンパイル時に。

+0

ありがとうございました!それは本当にうまくいった、私はこれを4時間前に解決しようとしていた。しかしもう一つ質問があります。複数のクラスを持っているとどうなりますか? どうすればデフォルトで入力する必要がないので、入力する必要はありません 'C++ main.cpp class1.cpp class2.cpp class3.cpp -o main' コードをコンパイルするたびに? –

+0

ビルを自動化する方法の詳細については、makefileチュートリアルを参照する必要があります。https://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/makefile.html – Curious

+0

もう一度ありがとうございます! :D –

関連する問題