2013-12-08 78 views
0
#pragma once 
#define _CRT_SECURE_NO_WARNINGS 
#ifndef ViasLigacaoAuto_ 
#define ViasLigacaoAuto_ 

#include <iostream> 
#include <string> 
using namespace std; 
#include "LocInteresse.h" 
#include "ViasLigacao.h" 

class ViasLigacaoAuto : public ViasLigacao 
{ 
private: 
    float precoportagem; 

public: 
    ViasLigacaoAuto(); 
    ViasLigacaoAuto(LocInteresse* &locInteresse1,LocInteresse* &locInteresse2,string codigodavia,int totalkms,int tempomedio,float precoportagem); 
    ViasLigacaoAuto(string codigodavia,int totalkms,int tempomedio,float precoportagem); 
    ViasLigacaoAuto(const ViasLigacaoAuto& va); 
    ~ViasLigacaoAuto(); 

    float getPrecoportagem()const; 
    void setPrecoportagem(float precoportagem); 



     void listar()const; 
     ViasLigacao* ViasLigacaoAuto :: clone() { return new ViasLigacaoAuto(*this);}   //criar uma copia de um objecto que ja existe 

     ViasLigacaoAuto& operator=(const ViasLigacaoAuto &va); 
     virtual void ViasLigacaoAuto:: escrever(ostream &out) const; 
}; 


//constructores 

ViasLigacaoAuto :: ViasLigacaoAuto() : ViasLigacao() 
{ 
    this->precoportagem=-1; 
} 

ViasLigacaoAuto :: ViasLigacaoAuto(LocInteresse* &locInteresse1,LocInteresse* &locInteresse2,string codigodavia,int totalkms,int tempomedio,float precoportagem) : 
    ViasLigacao(locInteresse1,locInteresse2,codigodavia,totalkms,tempomedio) 
{ 
    (*this).setPrecoportagem(precoportagem); 
} 

    ViasLigacaoAuto::ViasLigacaoAuto(const ViasLigacaoAuto& va) : ViasLigacao(va) 
{ 
    this->precoportagem=va.precoportagem; 
} 

    ViasLigacaoAuto :: ~ViasLigacaoAuto() 
{ 
} 


void ViasLigacaoAuto::setPrecoportagem(float precoportagem) 
{ 
    (*this).precoportagem=precoportagem; 
} 

float ViasLigacaoAuto::getPrecoportagem()const{ 
    return (*this).precoportagem; 
} 


void ViasLigacaoAuto :: listar() const 
{ 

} 

    ViasLigacaoAuto& ViasLigacaoAuto::operator=(const ViasLigacaoAuto &va) 
{ 

    if(this!=&va) 
    { 
     precoportagem=va.precoportagem; 
     ViasLigacao::operator=(va); 
    } 

    return (*this); 
} 


    void ViasLigacaoAuto :: escrever(ostream &out) const 
{ 
    out << "Autoestrada " << endl; 
    ViasLigacao::escrever(out);   //atributos herdados da classe viasligacao 
    out << "Preco da portagem: " << precoportagem << endl; 


} 

    ostream& operator<<(ostream &o, const ViasLigacaoAuto &va)  
{ 
    va.escrever(o); 
    return o; 
} 

#endif 

*错误LNK2019:解析外部符号

#pragma once 
#ifndef _ApViasLigacao_ 
#define _ApViasLigacao_ 

#include <ostream> 

using namespace std; 

#include "ViasLigacao.h" 
#include "ViasLigacaoAuto.h" 
#include "ViasLigacaoNacional.h" 
#include "Teste.h" 
#include "LocInteresse.h" 
#include "LocInteresseCult.h" 
#include "LocInteresseNat.h" 

//---------Classe apontador para ViasLigacao--------- 

class ApViasLigacao { 
private: 
    ViasLigacao *apvl; 

    enum TipoComparacao { KMS , CUSTO ,TEMPO}; 
    static TipoComparacao tipoComparacao; 

public: 
    static void setComparacaoKMS(); 
    static void setComparacaoCUSTO(); 
    static void setComparacaoTEMPO(); 

    int getTotalkms() const; 

    virtual float getPrecoportagem() const; 
    int getTempomedio()const; 

    LocInteresse* getLocIni(); 
    void setLocIni(LocInteresse); 
    LocInteresse* getLocFim(); 
    void setLocFim(LocInteresse); 


    ApViasLigacao(); 
    ApViasLigacao(ViasLigacao* &vl); 
    ApViasLigacao(string codigodavia,int totalkms,int tempomedio,float precoportagem); 
    ApViasLigacao(string codigodavia,int totalkms,int tempomedio,string pavimento); 
    ApViasLigacao(const ApViasLigacao &vl); 
    ~ApViasLigacao(); 


    const ApViasLigacao & operator=(const ApViasLigacao &vl); 
    bool operator >(const ApViasLigacao &vl) const; 
    bool operator <(const ApViasLigacao &vl) const; 
    bool operator ==(const ApViasLigacao &vl) const; 
    ApViasLigacao operator+(const ApViasLigacao &vl); 
    const ApViasLigacao & operator+=(const ApViasLigacao &vl); 

    void write(ostream &out) const; 
}; 

ApViasLigacao::TipoComparacao ApViasLigacao::tipoComparacao=ApViasLigacao::TipoComparacao::KMS; 

void ApViasLigacao::setComparacaoKMS() { 
    tipoComparacao=TipoComparacao::KMS; 
} 
void ApViasLigacao::setComparacaoCUSTO() { 
    tipoComparacao=TipoComparacao::CUSTO; 
} 
void ApViasLigacao::setComparacaoTEMPO(){ 
    tipoComparacao=TipoComparacao::TEMPO; 
} 

int ApViasLigacao::getTotalkms() const { 
    return apvl->getTotalkms(); 
} 
float ApViasLigacao::getPrecoportagem() const { 
    return apvl->getPrecoportagem(); 
} 
int ApViasLigacao::getTempomedio() const { 
    return apvl->getTempomedio(); 
} 

ApViasLigacao::ApViasLigacao() { 
    this->apvl = new ViasLigacaoAuto(); 
} 

ApViasLigacao::ApViasLigacao(string codigodavia,int totalkms,int tempomedio,float precoportagem) { 
    apvl = new ViasLigacaoAuto(codigodavia, totalkms,tempomedio, precoportagem); 
} 

ApViasLigacao::ApViasLigacao(string codigodavia,int totalkms,int tempomedio,string pavimento) { 
    apvl = new ViasLigacaoNacional(codigodavia,totalkms,tempomedio,pavimento); 
} 


ApViasLigacao::ApViasLigacao(ViasLigacao* &vl) { 
    this->apvl = vl->clone(); 
} 
ApViasLigacao::ApViasLigacao(const ApViasLigacao &vl) { 
    this->apvl = vl.apvl->clone(); 
} 
ApViasLigacao::~ApViasLigacao() { 
    delete apvl; 
} 

//bool compara(int km1, int km2, double c1, double c2, std:: 

bool ApViasLigacao::operator >(const ApViasLigacao &vl) const { 
    if (tipoComparacao==TipoComparacao::KMS) return (*this).getTotalkms() > vl.getTotalkms(); 
    if (tipoComparacao==TipoComparacao::CUSTO){ 
     if((*this).getPrecoportagem() == vl.getPrecoportagem()){ 
      return (*this).getTotalkms() > vl.getTotalkms(); 
     } 
     return (*this).getPrecoportagem() > vl.getPrecoportagem(); 
    } 
    return (*this).getTempomedio() > vl.getTempomedio(); 

} 
bool ApViasLigacao::operator <(const ApViasLigacao &vl) const { 
    if (tipoComparacao==TipoComparacao::KMS) return (*this).getTotalkms() < vl.getTotalkms(); 
    if (tipoComparacao==TipoComparacao::CUSTO){ 
     if((*this).getPrecoportagem() == vl.getPrecoportagem()){ 
      return (*this).getTotalkms() < vl.getTotalkms(); 
     } 
     return (*this).getPrecoportagem() < vl.getPrecoportagem(); 
    } 
    return (*this).getTempomedio() < vl.getTempomedio(); 
} 

bool ApViasLigacao::operator ==(const ApViasLigacao &vl) const { 
    if (tipoComparacao==TipoComparacao::KMS) return (*this).getTotalkms() == vl.getTotalkms(); 
    if (tipoComparacao==TipoComparacao::CUSTO) return (*this).getPrecoportagem() == vl.getPrecoportagem(); 
    return (*this).getTempomedio() == vl.getTempomedio(); 
} 


ApViasLigacao ApViasLigacao::operator+(const ApViasLigacao &vl) { 
    return ApViasLigacao("", (*this).getTotalkms()+vl.getTotalkms(), (*this).getTempomedio()+vl.getTempomedio(), (*this).getPrecoportagem()+vl.getPrecoportagem()); 
} 

const ApViasLigacao & ApViasLigacao::operator+=(const ApViasLigacao &vl) { 

    this->apvl->setTotalkms(this->apvl->getTotalkms()+vl.apvl->getTotalkms()); 
     this->apvl->setTempomedio(this->apvl->getTempomedio()+vl.apvl->getTempomedio()); 
     if (typeid(*apvl)==typeid(ViasLigacaoAuto)) { 
      ViasLigacaoAuto *vla = (ViasLigacaoAuto *)this->apvl; 
     vla->setPrecoportagem(vla->getPrecoportagem()+vl.apvl->getPrecoportagem()); 
    } 
    return *this; 
} 

const ApViasLigacao & ApViasLigacao::operator=(const ApViasLigacao &vl) { 
    this->apvl = vl.apvl->clone(); 
    return *this; 
} 
void ApViasLigacao::write(ostream &out) const { 
    out << *apvl; 
} 


ostream &operator <<(ostream &out, const ApViasLigacao &vl) 
{ 
    vl.write(out); 
    return out; 
} 


#endif 

*

#define _CRT_SECURE_NO_WARNINGS 
#ifndef ViasLigacao_ 
#define ViasLigacao_ 
#include <iostream> 
#include <string> 
#include <iomanip> 

using namespace std; 

#include "LocInteresse.h" 


class ViasLigacao 
{ 
private: 
    LocInteresse locInteresse1, locInteresse2; 
    string codigodavia; 
    int totalkms; 
    int tempomedio; 

public: 
    ViasLigacao(); 
    ViasLigacao(LocInteresse* locInteresse1,LocInteresse* locInteresse2,string codigodavia,int kms,int tempo); 
    ViasLigacao(const ViasLigacao &v); 
    virtual ~ViasLigacao(); //destructor 

    void listar()const; 
    virtual ViasLigacao* clone()const; 

    LocInteresse* getLocInteresse1(); 
    void setLocInteresse1(LocInteresse); 
    LocInteresse* getLocInteresse2(); 
    void setLocInteresse2(LocInteresse); 


    string getCodigodavia()const; 
    void setCodigodavia(string codigodavia); 

    int getTotalkms()const; 
    void setTotalkms(int kms); 

    int getTempomedio()const; 
    void setTempomedio(int tempo); 

    virtual float getPrecoportagem() const; 

    const ViasLigacao & operator=(const ViasLigacao &v); 
    bool operator>(const ViasLigacao &v) const; 
    bool operator==(const ViasLigacao &v) const; 
    bool operator <(const ViasLigacao &v) const; 
    bool operator<=(const ViasLigacao &v)const; 
    ViasLigacao operator+(const ViasLigacao &v); 
    const ViasLigacao & operator+=(const ViasLigacao &v); 

    void escrever(ostream &out) const;     // só se mete VIRTUAL quando sao subclasses 

}; 

ViasLigacao::ViasLigacao() 
{ 
    codigodavia = " "; 
    totalkms= -1; 
    tempomedio=-1; 
} 

ViasLigacao::ViasLigacao(LocInteresse* LocInteresse1, LocInteresse* LocInteresse2,string codigodavia, int totalkms,int tempomedio) 
{ 
    //this->locInteresse1=LocInteresse1; 
// this->locInteresse2=LocInteresse2; 
    this->codigodavia = codigodavia; 
    this->totalkms = totalkms; 
    this->tempomedio=tempomedio; 
} 

ViasLigacao::ViasLigacao(const ViasLigacao & v) 
{ 
    this->locInteresse1=v.locInteresse1; 
    this->locInteresse2=v.locInteresse2; 
    this->codigodavia = v.codigodavia; 
    this->totalkms = v.totalkms; 
    this->tempomedio= v.tempomedio; 
} 

ViasLigacao::~ViasLigacao() 
{ 
} 

//set's e get's 

void ViasLigacao::setLocInteresse1(LocInteresse locInteresse1) 
{ 
    locInteresse1 = locInteresse1; 
} 

LocInteresse* ViasLigacao::getLocInteresse1(){ 
    return &locInteresse1; 
} 


void ViasLigacao::setLocInteresse2(LocInteresse locInteresse2) 
{ 
    locInteresse2 = locInteresse2; 
} 

LocInteresse* ViasLigacao::getLocInteresse2(){ 
    return &locInteresse2; 
} 


void ViasLigacao::setCodigodavia(string codigodavia) 
{ 
    this->codigodavia = codigodavia; 
} 

string ViasLigacao::getCodigodavia()const{ 
    return this->codigodavia; 
} 

void ViasLigacao::setTotalkms(int totalkms) 
{ 
    this->totalkms = totalkms; 
} 

int ViasLigacao::getTotalkms()const 
{ 
    return this->totalkms; 
} 

void ViasLigacao::setTempomedio(int tempomedio) 
{ 
    this->tempomedio = tempomedio; 
} 

int ViasLigacao::getTempomedio()const 
{ 
    return this->tempomedio; 
} 


ViasLigacao* ViasLigacao ::clone() const{ 
    return new ViasLigacao(*this); 
} 

float ViasLigacao::getPrecoportagem() const{ 
    return 0; 
} 

bool ViasLigacao :: operator>(const ViasLigacao &v)const{ 

    if(totalkms > v.totalkms) 
    { 
     return true; 
    } 
    return false; 

} 

bool ViasLigacao :: operator==(const ViasLigacao &v)const{ 

    if(totalkms > v.totalkms) 
    { 
     return true; 
    } 
    return false; 

} 

const ViasLigacao& ViasLigacao:: operator= (const ViasLigacao& v){ 
     if(&v != this){ 
     (*this)=ViasLigacao(v); 
    } 
    return *this; 

} 

ostream& operator<<(ostream &o, const ViasLigacao &v)  
{ 
    v.escrever(o); 
    return o; 
} 

void ViasLigacao :: escrever(ostream &out) const 
{ 
    out << "Local de Interesse inicial:" << locInteresse1 << endl; 
    out << "Local de Interesse final:" << locInteresse2 << endl; 
    out << "Via de ligação: " << endl; 
    out << "Codigo da via: " << codigodavia << endl; 
    out << "Total de kms: " << totalkms << endl; 
    out << "Tempo medio: " << tempomedio << endl; 
} 


#endif 

谁能帮助? 我得到这个错误

Error 6 error LNK2019: unresolved external symbol "public: __thiscall ViasLigacaoAuto::ViasLigacaoAuto(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int,float)" ([email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: __thiscall ApViasLigacao::ApViasLigacao(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int,float)" ([email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) C:\Users\joaopedro\Source\Repos\1110830_1121107_esinf\MapaDigital\Main.obj MapaDigital 
+0

你实现构造函数? –

回答

1

它说,它不能找到你声明的ViasLigacaoAuto(就是那个需要字符串,整数,整数,浮点)第三个构造 - 事实上,这个构造不似乎在您的代码中定义。你需要定义它。

(只是偶尔的编译器/连接错误消息告诉你的问题实际上是什么。)

+0

*只是偶尔*部分讽刺? :) –

+0

@Moo我不能说;每个读者都必须自己阅读。但是C++编译器在糟糕的错误消息方面有着良好的声誉,直到最近才被证明是合理的。 –

相关问题