[英]Passing an object as argument to a Class constructor
我正在尝试从Python和PyQt迁移到C ++和Qt。 我从一些基本的OOP开始,但我偶然发现了这个:
#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;
}
#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
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.