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未找到

相关文章:
  • 没有找到相关文章