写了一个小程序,学习C++ 类继承:
#include <iostream>
using namespace std;
// 基类
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
// 派生类
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);
Rect.setHeight(7);
// 输出对象的面积
cout << "Total area: " << Rect.getArea() << endl;
return 0;
}
gcc编译 gcc a.cpp -o a
出现如下报错:
a.cpp:(.text+0x4e): undefined reference to `std::cout'
a.cpp:(.text+0x53): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
a.cpp:(.text+0x5d): undefined reference to `std::ostream::operator<<(int)'
a.cpp:(.text+0x62): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
a.cpp:(.text+0x6a): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/tmp/ccdjrVYc.o: In function `__static_initialization_and_destruction_0(int, int)':
a.cpp:(.text+0xb1): undefined reference to `std::ios_base::Init::Init()'
a.cpp:(.text+0xc0): undefined reference to `std::ios_base::Init::~Init()'
collect2: error: ld returned 1 exit status
解决方法:
我们常见的编译器有两个:gcc 编译器和 g++ 编译器。
gcc和g++编译器的区别
g++: 会把.c和.cpp的文件都当作是C++的源程序进行编译。
gcc:会把.c的程序当作是C的源程序进行编译,.cpp的程序当作是C++的源程序进行编译
解决上面的错误,就是把gcc编译器换成g++编译器。
g++ a.cpp -o a
./a
运行结果如下: