下面的程序只是为了试验继承,下面的代码工作得很好......直到我在继承类“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,做一些简短的例子,然后发表一些简洁的文章。 –