下面的程序只是爲了試驗繼承,下面的代碼工作得很好......直到我在繼承類「pochodna」的複製構造函數中添加「const」而不改變任何東西。這使得以下列方式更改代碼(OFC,變化也已經在頭文件中完成):複製「const」構造函數 - 鏈接器錯誤?
pochodna::pochodna(const pochodna & wzor): podstawowa(wzor) {
this->x=wzor.x;
this->y=wzor.y;
}
編譯器顯示更改後出現以下錯誤:
[Linker error] undefined reference to pochodna::pochodna(pochodna&)
。
發生同樣的情況,當我 「常量」 添加到操作員=參數使其podstawowa &運算符=(const的 podstawowa & obiekt)。你能告訴我爲什麼發生這種情況嗎? :)
其中一個類podstawowa.h:
#ifndef PODSTAWOWA_H
#define PODSTAWOWA_H
#include <iostream>
using namespace std;
class podstawowa
{
private:
int alfa;
int beta;
const int staly;
public:
podstawowa(int=0, int=0);
podstawowa(const podstawowa& wzor);
~podstawowa();
podstawowa& operator=(podstawowa& obiekt);
ostream& operator<<(ostream &strumien);
};
#endif // PODSTAWOWA_H
Podstawowa.cpp
#include "podstawowa.h" // class's header file
#include <iostream>
using namespace std;
podstawowa::podstawowa(int alf,int bet): alfa(alf), beta(bet),staly(0)
{}
podstawowa::podstawowa(const podstawowa& wzor):staly(0){
this->alfa = wzor.alfa;
this->beta = wzor.beta;
}
podstawowa::~podstawowa()
{}
podstawowa& podstawowa::operator=(podstawowa& obiekt){
this->alfa = obiekt.alfa;
this->beta = obiekt.beta;
return *this;
}
ostream& podstawowa::operator<<(ostream &strumien){
strumien << "Alfa: ";
strumien << this->alfa;
strumien << "\n";
strumien << "Beta: ";
strumien << this->beta;
strumien << "\n";
return strumien;
}
另一類,從podstawowa繼承:pochodna.h
#ifndef POCHODNA_H
#define POCHODNA_H
#include "podstawowa.h"
class pochodna : public podstawowa
{ private:
double x;
double y;
public:
pochodna(double=0, double=0);
pochodna(pochodna&);
~pochodna();
pochodna& operator=(pochodna&);
friend ostream& operator<<(ostream&, pochodna&);
};
#endif // POCHODNA_H
pochodna。 cpp
#include "pochodna.h" // class's header file
pochodna::pochodna(double iks, double ygr):podstawowa(), x(iks),y(ygr)
{}
pochodna::pochodna(pochodna & wzor): podstawowa(wzor) {
this->x=wzor.x;
this->y=wzor.y;
}
pochodna::~pochodna()
{}
pochodna& pochodna::operator=(pochodna& obiekt){
(*this).podstawowa::operator=(obiekt);
this->x=obiekt.x;
this->y=obiekt.y;
}
ostream& operator<<(ostream& strumien, pochodna& obiekt){
obiekt.podstawowa::operator<<(strumien);
strumien << "X: " << obiekt.x << "\nY: " << obiekt.y <<"\n";
return strumien;
}
Main.cpp的
#include <cstdlib>
#include <iostream>
#include "podstawowa.h"
#include "pochodna.h"
using namespace std;
int main(int argc, char *argv[])
{
pochodna pierwsza;
pochodna druga(0.123, 3.14);
cout << pierwsza << druga;
pierwsza = druga;
cout << "Po pierwsza = druga: \n";
cout << pierwsza << druga;
pochodna enta(druga);
cout<< "teraz enta \n" << enta;
system("PAUSE");
return EXIT_SUCCESS;
}
*感嘆*這就是爲什麼用母語編寫代碼是一個壞主意。無論如何,請儘量縮小範圍(製作SSCCE)。試着隔離你沒有的所有不必要的東西的問題。 –
逆波蘭表示法:'{} Foo〜default Foo = Foo class'。 –
請在發佈之前花點時間在本網站上閱讀*。看看其他帖子是什麼樣子,以及成功的問題與不成功的問題的區別。閱讀FAQ,做一些簡短的例子,然後發表一些簡潔的文章。 –