繁体   English   中英

将对象作为参数传递给Class构造函数

[英]Passing an object as argument to a Class constructor

我正在尝试从Python和PyQt迁移到C ++和Qt。 我从一些基本的OOP开始,但我偶然发现了这个:

main.cpp中

#include <iostream>
#include "src/gpoint.h"
#include "src/gquadrilateral.h"

int main() {
    std::cout << "Running..." << std::endl;
    GPoint origin1(23, 50);
    GQuadrilateral rectangle1(origin1, 100, 100);
    std::cout << "Finished..." << std::endl;
    return 0;
}

gpoint.h

#ifndef GPOINT_H
#define GPOINT_H

class GPoint {

    public:
        GPoint(int x = 0, int y = 0);
        int x();
        int y();
        ~GPoint();

    protected:

    private:
        int m_x;
        int m_y;

    };

#endif

gquadrilateral.h

class GPoint;

class GQuadrilateral {

    public:
        GQuadrilateral(GPoint origin, int width, int height);
        int width();
        int height();
        ~GQuadrilateral();

    protected:

    private:
        int m_width;
        int m_height;

    };

我正在尝试将GPoint对象传递给GQuadrilateral构造函数。 我收到以下链接错误:

Building target: geometrix.exe
Invoking: Cygwin C++ Linker
g++  -o "geometrix.exe"  ./src/gpoint.o ./src/gquadrilateral.o  ./main.o   
./main.o: In function `main':
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:21: undefined reference to `GQuadrilateral::GQuadrilateral(GPoint, int, int)'
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:21:(.text+0x109): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `GQuadrilateral::GQuadrilateral(GPoint, int, int)'
makefile:45: recipe for target 'geometrix.exe' failed
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:21: undefined reference to `GQuadrilateral::~GQuadrilateral()'
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:21:(.text+0x148): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `GQuadrilateral::~GQuadrilateral()'
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:24: undefined reference to `GQuadrilateral::~GQuadrilateral()'
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:24:(.text+0x178): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `GQuadrilateral::~GQuadrilateral()'
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:21: undefined reference to `GQuadrilateral::~GQuadrilateral()'
/cygdrive/d/workspaces/geometrix/Debug/../main.cpp:21:(.text+0x189): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `GQuadrilateral::~GQuadrilateral()'
collect2: error: ld returned 1 exit status
make: *** [geometrix.exe] Error 1

你能给我一个提示吗?



编辑1:在gpoint.h中添加了条件指令;

此错误意味着构造函数根本没有实现,只是声明,或者您没有链接到包含此特定构造函数的库或对象。 (这同样适用于desctructor以及顺便说一下)。

您可能会错过将对象链接在一起的阶段。 在那种情况下,你必须运行

  `g++ -Wall -pedantic -c gpoint.c
   g++ -Wall -pedantic -c gquadrilateral.c
   g++ -Wall -pedantic -c main.c
   g++ -Wall -pedantic -o output main.o gpoint.o gquadrilateral.o`

将所有对象链接在一起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM