2016-11-28 9 views
0

私はこのコードを付けました。私がコンパイルしてEclipseで実行すると、に問題はありません。しかし、端末に、私のMakefile(付属)で、それは私に、このエラーを与える:未定義の参照先...端末エラーです。エクリプスではありません

bin/FigureCard.o: In function `FigureCard::FigureCard(Shape const&, Figure const&)': 
/home/shaike131/workspace/check/src/FigureCard.cpp:16: undefined reference to `Card::Card(Shape)' 

bin/FigureCard.o: In function `FigureCard::FigureCard(FigureCard&)': 
/home/shaike131/workspace/check/src/FigureCard.cpp:18: undefined reference to `Card::getShape2()' 

/home/shaike131/workspace/check/src/FigureCard.cpp:18: undefined reference to `Card::Card(Shape)' 

bin/FigureCard.o: In function `FigureCard::operator=(FigureCard&)': 
/home/shaike131/workspace/check/src/FigureCard.cpp:22: undefined reference to `Card::getShape2()' 

/home/shaike131/workspace/check/src/FigureCard.cpp:22: undefined reference to `Card::setShape(Shape)' 

bin/FigureCard.o: In function `FigureCard::getShape()': 
/home/shaike131/workspace/check/src/FigureCard.cpp:43: undefined reference to `Card::getShape2()' 

bin/FigureCard.o: In function `FigureCard::comperator(Card*)': 
/home/shaike131/workspace/check/src/FigureCard.cpp:71: undefined reference to `typeinfo for Card' 

bin/FigureCard.o: In function `FigureCard::~FigureCard()': 
/home/shaike131/workspace/check/src/../include/FigureCard.h:12: undefined reference to `Card::~Card()' 

bin/FigureCard.o:(.rodata._ZTI10FigureCard[_ZTI10FigureCard]+0x10): undefined reference to `typeinfo for Card' 
bin/NumericCard.o: In function `NumericCard::NumericCard(Shape const&, int const&)': 
/home/shaike131/workspace/check/src/NumericCard.cpp:18: undefined reference to `Card::Card(Shape)' 

bin/NumericCard.o: In function `NumericCard::NumericCard(NumericCard&)': 
/home/shaike131/workspace/check/src/NumericCard.cpp:19: undefined reference to `Card::getShape2()' 

/home/shaike131/workspace/check/src/NumericCard.cpp:19: undefined reference to `Card::Card(Shape)' 

bin/NumericCard.o: In function `NumericCard::operator=(NumericCard&)': 
/home/shaike131/workspace/check/src/NumericCard.cpp:24: undefined reference to `Card::getShape2()' 

/home/shaike131/workspace/check/src/NumericCard.cpp:24: undefined reference to `Card::setShape(Shape)' 

bin/NumericCard.o: In function `NumericCard::getShape()': 
/home/shaike131/workspace/check/src/NumericCard.cpp:32: undefined reference to `Card::getShape2()' 

bin/NumericCard.o: In function `NumericCard::comperator(Card*)': 
/home/shaike131/workspace/check/src/NumericCard.cpp:65: undefined reference to `typeinfo for Card' 

bin/NumericCard.o: In function `NumericCard::~NumericCard()': 
/home/shaike131/workspace/check/src/../include/NumericCard.h:16: undefined reference to `Card::~Card()' 

bin/NumericCard.o:(.rodata._ZTI11NumericCard[_ZTI11NumericCard]+0x10): undefined reference to `typeinfo for Card' 

bin/Hand.o: In function `Hand::addCard(Card&)': 

感謝を。 シャイ

FigureCardクラス:

#include "../include/Card.h" 
#include "../include/FigureCard.h" 
#include <iostream> 
#include <string> 
using namespace std; 
#include <sstream> 
#include <memory> 


FigureCard :: FigureCard(const Shape &shape,const Figure &figure):Card(shape),figure(figure){} 

FigureCard :: FigureCard(FigureCard& other):Card(other.getShape2()), figure(other.figure){} 
FigureCard& FigureCard:: operator= (FigureCard& other){ 

    if(this!=&other){ 
     this->setShape(other.getShape2()); 
     figure=other.figure; 
    } 
    return *this; 
} 

char FigureCard:: getFigure(){ 
    char s; 
    switch(figure) 
    { 
     case Jack: s='J';break; 
     case Queen: s='Q';break; 
     case King : s='K';break; 
     case Ace : s='A';break; 
    } 

return s; 
} 

char FigureCard:: getShape(){ 
    char s; 
    switch(this->getShape2()) 
    { 
    case Club: s='C';break; 
    case Diamond: s='D';break; 
    case Heart : s='H';break; 
    case Spade : s='S';break; 
    } 

return s; 
} 


Figure FigureCard::getFigure2(){ 
    return this->figure; 
} 


string FigureCard:: toString() 
    { 
    string s(1,this->getFigure()); 
     s=s+this->getShape(); 
    return s; 
    } 

    int FigureCard:: comperator(Card* other){ 
    int ans=0; 
    if (this->getType().size()==(other->getType().size())){ //if it's both FigureCard 
     char figure1=this->getFigure(); 
     FigureCard* fg = dynamic_cast<FigureCard*>(other); 
     char figure2=fg->getFigure(); 

     if(figure1=='A'){ 
      if(figure2!='A') 
       ans=1;//a is A and b is lower 
     } 
     else if(figure2=='A') 
      ans=-1;//b is A and a is lower 
     else if(figure1=='K'){ 
      if(figure2!='K') 
       ans=1;//a is K and b is lower 
     } 
     else if(figure2=='K') 
      ans=-1;//b is K and a is lower 
     else if(figure1=='Q'){ 
      if(figure2!='Q') 
       ans=1;//a is Q and b is lower 
     } 
     else if(figure2=='Q') 
      ans=-1;//b is Q and a is lower 


     if(ans==0){//the figures of first and second are the same 
      char shape1=this->getShape(); 
      char shape2=other->getShape(); 
      if(shape1>shape2) 
       ans=1; 
      else if(shape1<shape2) 
       ans=-1; 

     } 
    } 

    else 
     ans=1; //first card is FigureCard card and second card is NumericCard 
    return ans; 
    } 

string FigureCard:: getType(){ 
    return "FigureCard"; 
} 

NumericCard.cpp

/* 
* NumericCard.cpp 
* 
* Created on: Nov 28, 2016 
*  Author: shaike131 
*/ 


#include "../include/Card.h" 
#include <iostream> 
#include <string> 
using namespace std; 
#include <sstream> 
#include <memory> 
#include "../include/NumericCard.h" 


NumericCard :: NumericCard(const Shape &shape,const int &number):Card(shape),number(number){} 
NumericCard :: NumericCard(NumericCard& other):Card(other.getShape2()), number(other.number){} 
NumericCard& NumericCard:: operator= (NumericCard& other){ 

    if(this!=&other){ 
     this->number=other.number; 
     this->setShape(other.getShape2()); 

    } 
    return *this; 
} 

char NumericCard:: getShape(){ 
    char s; 
    switch(this->getShape2()) 
    { 
    case Club: s='C';break; 
    case Diamond: s='D';break; 
    case Heart : s='H';break; 
    case Spade : s='S';break; 
    } 

return s; 
} 



string NumberToString (int Number) 
    { 
    ostringstream ss; 
    ss << Number; 
    return ss.str(); 
    } 
string NumericCard:: toString() 
    { 
    string s = NumberToString(number); 

    s=s+this->getShape(); 

    return s; 
    } 


int NumericCard:: comperator(Card* other){ 
    int ans=0; 
    if(this->getType().size()==other->getType().size()){ //if it's both numbers 
     int num1=this->getNumber(); 
     NumericCard* num = dynamic_cast<NumericCard*>(other); 
     int num2=num->getNumber(); 
     if(num1>num2) 
      ans=1; 
     else if(num1<num2) 
      ans=-1; 
     else{ 
      char shape1=this->getShape(); 
      char shape2=other->getShape(); 
      if(shape1>shape2) 
       ans=1; 
      else if(shape1<shape2) 
       ans=-1; 
     } 
    } 
    else // if first card is NumericCard and second card is FigureCard 
     ans=-1; 
    return ans; 
    } 


string NumericCard:: getType(){ 
    return "NumericCard"; 
} 
int NumericCard:: getNumber(){ 
    return this->number; 
} 

カード:

#include "../include/Card.h" 
#include <iostream> 
#include <string> 
using namespace std; 
#include <sstream> 
#include <memory> 


Card::Card(Shape Pshape):shape(Pshape){} 
Card::Card(){} 

Card::~Card() { 
} 

Shape Card::getShape2(){ 
    return this->shape; 
} 


void Card::setShape(Shape shape){ 
    this->shape=shape; 
} 

のMakefile:

# All Targets 
all: check 

# Tool invocations 
# Executable "check" depends on the files CyberDNS.o,CyberExpert.o,CyberPC.o,CyberWorm.o,Cyber.o. 

check: bin/Card.o bin/FigureCard.o bin/NumericCard.o bin/Deck.o bin/Player.o bin/link.o bin/linkedList.o bin/Game.o bin/Hand.o bin/check.o 
    g++ -o bin/Card.o bin/FigureCard.o bin/NumericCard.o bin/Deck.o bin/Player.o bin/link.o bin/linkedList.o bin/Game.o bin/Hand.o bin/check.o 
# Depends on the source and header files 

bin/Card.o: src/Card.cpp 
    g++ -g -Wall -c -Linclude -o bin/Card.o src/Card.cpp 
# Depends on the source and header files 

bin/FigureCard.o: src/FigureCard.cpp 
    g++ -g -Wall -c -Linclude -o bin/FigureCard.o src/FigureCard.cpp 
# Depends on the source and header files 

bin/NumericCard.o: src/NumericCard.cpp 
    g++ -g -Wall -c -Linclude -o bin/NumericCard.o src/NumericCard.cpp 
# Depends on the source and header files 


bin/Deck.o: src/Deck.cpp 
    g++ -g -Wall -c -Linclude -o bin/Deck.o src/Deck.cpp 
# Depends on the source and header files 

bin/Player.o: src/Player.cpp 
    g++ -g -Wall -c -Linclude -o bin/Player.o src/Player.cpp 
# Depends on the source and header files 

bin/link.o: src/link.cpp 
    g++ -g -Wall -c -Linclude -o bin/link.o src/link.cpp  
# Depends on the source and header files 

bin/linkedList.o: src/linkedList.cpp 
    g++ -g -Wall -c -Linclude -o bin/linkedList.o src/linkedList.cpp 

bin/Game.o: src/Game.cpp 
    g++ -g -Wall -c -Linclude -o bin/Game.o src/Game.cpp 

bin/Hand.o: src/Hand.cpp 
    g++ -g -Wall -c -Linclude -o bin/Hand.o src/Hand.cpp 

bin/check.o: src/check.cpp 
    g++ -g -Wall -c -Linclude -o bin/check.o src/check.cpp 

#Clean the build directory 
clean: 
    $(RM) bin/*  
All: 
    bin/check bin/Card.o bin/FigureCard.o bin/NumericCard.o bin/Deck.o bin/Player.o bin/link.o bin/linkedList.o bin/Game.o bin/Hand.o bin/check.o 
+3

[定義されていない参照/未解決の外部シンボルエラーとは何か、それを修正する方法は?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部記号エラー・アンド・ハウ・ド・イ・フィックス) – lcs

答えて

0
g++ -o bin/Card.o bin/FigureCard.o bin/NumericCard.o ... 

これは、bin/Card.oという出力ファイルを作成するようにg++に指示します。これにより、bin/Card.oは残りのオブジェクトモジュールとリンクされませんが、上書きされます。

あなたが実際にあなたの実行可能ファイルの名前が何であるか g++、すなわち指示する必要があり

:それがあった後

g++ -o this_is_my_executable bin/Card.o bin/FigureCard.o bin/NumericCard.o ... 

をそして、あなたは再makerm bin/Card.oより良いが、これを-ingは、とても良いbin/Card.oは、再コンパイルすることができます上書きされます。

関連する問題