mutojack
mutojack
采纳率100%
2018-03-17 01:54

c++ 编译时报错 "undefined reference to ……"

5
  • 编译器
  • c++
  • class
已采纳

编译情况

总共有五个文件,Graph.h ,Graph.cpp,diamond.h.diamond.cpp,new.cpp
编译成功的是我把diamond类的声明和定义(Graph的声明和定义也放在了一个文件里,但是没有影响)都放在diamond.cpp里。
new.cpp 就是包含了"Graph.h"和"diamond.",然后用diamond创建了一个对象,调用ShapePrint()函数。

Graph.h

 #ifndef _Graph_H_
#define _Graph_H_

class shape
{
    public:
        void ShapePrint();
        void ShapePrint(int x);
        void ShapePrint(int x,int y);
        int GetLength_x();
        int GetLength_y();
    protected:
        void SetLength_x(int length_x);
        void SetLength_y(int length_y);
    private:
        int length_x ;
        int length_y ;

};

#endif

diamond.h

 #include <iostream>
#include <iomanip>
#include "Graph.h"
#ifndef _diamond_
#define _diamond_
class diamond:public shape{
public:
    diamond();

    diamond(int x);

    int GetLength();
protected:
    void SetLength(int l);

private:
    int length;

};
#endif

diamond.cpp

 #include "diamond.h"
using namespace std;
void diamond::SetLength(int l)
{
    this->length = l;
}


int diamond::GetLength()
{
    return length;
}


diamond::diamond()
    {
        SetLength(7);
    }
diamond::diamond(int l)
    {
        SetLength(l);
    }
    void diamond::ShapePrint()
    {
        int length=GetLength();
        for(int i=1;i<=length;++i)
        {
            cout<<setw(length-i+1)<<"*";
            if(i!=1)
                cout<<setw(2*i-2)<<"*"<<endl;
            else
                cout<<endl;
        }
        for(int k=1;k<=length-1;k++)
        {
            cout<<setw(k+1)<<"*";
            if(k==length-1)
                cout<<endl;
            else
                cout<<setw(2*(length-k)-2)<<"*"<<endl;
        }
    }
    void diamond::ShapePrint(int x)
    {
        int length=GetLength();
        for(int i=1;i<=length;++i)
        {
            cout<<setw(x+(length-i+1))<<"*";
            if(i!=1)
                cout<<setw(2*i-2)<<"*"<<endl;
            else
                cout<<endl;
        }
        for(int k=1;k<=length-1;k++)
        {
            cout<<setw(x+k+1)<<"*";
            if(k==length-1)
                cout<<endl;
            else
                cout<<setw(2*(length-k)-2)<<"*"<<endl;
        }
    }
    void diamond::ShapePrint(int x,int y)
    {
        int length=GetLength();
        for(int i=1;i<=y;i++)
            cout<<endl;
        for(int i=1;i<=length;++i)
        {
            cout<<setw(x+(length-i+1))<<"*";
            if(i!=1)
                cout<<setw(2*i-2)<<"*"<<endl;
            else
                cout<<endl;
        }
        for(int k=1;k<=length-1;k++)
        {
            cout<<setw(x+k+1)<<"*";
            if(k==length-1)
                cout<<endl;
            else
                cout<<setw(2*(length-k)-2)<<"*"<<endl;
        }
    }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • nbitsy nbitsy 3年前

    g++ -o new Graph.cpp diamond.cpp new.cpp 应该没有问题
    你需要了解g++的编译选项怎么用

    点赞 1 评论 复制链接分享
  • qq_28311221 温柔的小七 3年前

    把Graph.h的定义放到diamond.h 里面应该就能过

    点赞 评论 复制链接分享
  • Likemorning Likemorning 3年前

    是否diamond.h在多个文件夹下面有,diamond.cpp找错文件了,
    你可以把diamond改个名称,再编译试试。

    点赞 评论 复制链接分享
  • weixin_39755759 weixin_39755759 3年前

    #include
    #include
    #include "Graph.h"
    #ifndef diamond
    #define diamond
    class diamond:public shape{
    public:
    diamond();

    diamond(int x);
    
    int GetLength();
    

    protected:
    void SetLength(int l);

    private:
    int length;

    };
    #endif

    点赞 评论 复制链接分享

为你推荐