在ubuntu下面使用g++编译c++程序遇到问题,请大神指点啊!
源程序:
1 namespace agg 2 { 3 4 template<class VertexSource, 5 class Generator, 6 class Markers=null_markers> class conv_adaptor_vcgen 7 { 8 public: 9 explicit conv_adaptor_vcgen(VertexSource& source) : 10 m_source(&source), 11 m_status(initial) 12 {} 13 private: 14 conv_adaptor_vcgen(const conv_adaptor_vcgen<VertexSource, Generator, Markers>&); 15 const conv_adaptor_vcgen<VertexSource, Generator, Markers>& 16 operator = (const conv_adaptor_vcgen<VertexSource, Generator, Markers>&); 17 18 VertexSource* m_source; 19 Generator m_generator; 20 Markers m_markers; 21 status m_status; 22 unsigned m_last_cmd; 23 double m_start_x; 24 double m_start_y; 25 }; 26 27 template<class VertexSource> 28 struct conv_contour : public conv_adaptor_vcgen<VertexSource, vcgen_contour> 29 { 30 typedef conv_adaptor_vcgen<VertexSource, vcgen_contour> base_type; 31 conv_contour(VertexSource& vs): 32 conv_adaptor_vcgen<VertexSource, vcgen_contour>(vs) 33 {} 34 private: 35 conv_contour(const conv_contour<VertexSource>&); 36 const conv_contour<VertexSource>& 37 operator = (const conv_contour<VertexSource>&); 38 }; 39 class ellipse 40 { 41 public: 42 ellipse() : 43 m_x(0.0), m_y(0.0), m_rx(1.0), m_ry(1.0), m_scale(1.0), 44 m_num(4), m_step(0), m_cw(false) {} 45 46 ellipse(double x, double y, double rx, double ry, 47 unsigned num_steps=0, bool cw=false) : 48 m_x(x), m_y(y), m_rx(rx), m_ry(ry), m_scale(1.0), 49 m_num(num_steps), m_step(0), m_cw(cw) 50 { 51 if(m_num == 0) calc_num_steps(); 52 } 53 private: 54 void calc_num_steps(); 55 double m_x; 56 double m_y; 57 double m_rx; 58 double m_ry; 59 double m_scale; 60 unsigned m_num; 61 unsigned m_step; 62 bool m_cw; 63 }; 64 }
下面是main.cpp里面:
1 #include <iostream> 2 #include <unistd.h> 3 #include <stdio.h> 4 #include "agg_ellipse.h" 5 #include "agg_conv_contour.h" 6 #include "agg_conv_stroke.h" 7 int main () 8 { 9 agg::ellipse ell(100,100,50,50); 10 typedef agg::conv_contour<agg::ellipse> ell_cc_type; 11 ell_cc_type ccell(ell); 12 }
使用命令:g++ -o agg main.cpp 进行编译
下面是所有的报错信息
1 /tmp/ccgc4XB9.o:In function 'agg::conv_adaptor_vcgen<agg::allipse,agg::vcgen_tour,agg::null_marker>::conv_adaptor_vcgen(agg:allipse&)':main.cpp:(.text.ZN3agg18conv_adaptor_vcgenINS_7ellipseENS_13vcgen_contourENS_12null_markersEEC2ERS1_[_ZN3agg18conv_adaptor_vcgenINS_7ellipseENS_13vcgen_contourENS_12null_markersEEC2ERS1_]+0x18):undefined reference to 'agg:vcgen_contour::vcgen_contour()' 2 collect2:ld返回1
开始以为是conv_contour类里面没有默认构造函数引起的,添加conv_contour(){}后依然报相同错误。。。。。。。
请各位指点一下。。。。。。。。。。
他说找不到vcgen_contour的默认构造函数。
你g++后头少cpp了吧。。
我有cpp文件的,为什么gcc/g++不会自动加入cpp文件而只编译h文件呢?是不是需要什么参数?
虽然问题自己已经解决了,但是还是把分给你吧。
@狂热与执着: vs是有个工程的。而gcc的话,本身是不搞工程的。你工程里头所有的文件都要一一指明。比如:
g++ -o output *.cpp
如果要额外的做法,请参考是不是使用make。
@狂热与执着: 另外,头文件你只要include了的话,他就会过预处理。