C++类的奇怪行为
C++ linked classes weird behaviour
本文关键字:C++ 更新时间:2023-10-16
以下代码表示策略设计模式。
请考虑以下程序结构:
//base.hpp
#ifndef BASE_HPP
#define BASE_HPP
class Base {
public:
virtual ~Base() {};
virtual int solve() = 0;
};
#endif
//derived.hpp
#include "base.hpp"
class Derived: public Base {
public:
virtual int solve() { return 77; }
};
我有一个客户端.cpp它接收派生的上下文
#include "client.hpp"
#include <iostream>
void Client::operate() {
std::cout << solver_.solve() << std::endl;
}
这是客户端的头文件:
#include "base.hpp"
class Client {
public:
Client(Base& b): solver_(b) {}
void operate();
private:
Base& solver_;
};
我的主要:测试.cpp
#include "client.hpp"
#include "derived.hpp"
int main() {
Derived d;
Client c(d);
c.operate() ;
}
我希望它打印 77,但程序根本不打印任何内容。
客户端接收由其构造函数派生的上下文,并将其存储为 Base&solver_;首先,调用客户端的操作方法,该方法调用派生自 Base 的类的相应求解方法。在这种情况下,派生。
是的,这应该输出 77,但它没有。程序编译良好,没有错误,只是干净退出。有什么想法吗?
我使用以下命令编译了它:
g++ -o program.exe client.cpp test.cpp
我使用的是 GCC 版本 5.3.0
我找到了解决方案。问题是一些库没有通过g++链接,即libstdc++-6.dll。
这个问题可以通过使用 -static-libgcc -static-libstdc++ 选项来解决。
该定义给出:"当g++程序用于链接C++程序时,它通常会自动链接到libstdc++。如果 libstdc++ 可用作共享库,并且未使用 -static 选项,则此链接对应于 libstdc++ 的共享版本。这通常没问题。但是,有时冻结程序使用的libstdc++版本而不完全静态链接是有用的。-static-libstdc++ 选项指示 g++ 驱动程序静态链接 libstdc++,而不必静态链接其他库。
参见:libstdc++-6.dll未找到
相关文章:
- 没有找到相关文章