如何编译使用shared_ptr的程序

How to compile the program which uses shared_ptr?

本文关键字:shared ptr 程序 何编译 编译      更新时间:2023-10-16

Client.h

#ifndef TEST_CLIENT_H_
#define TEST_CLIENT_H_
#include <memory>
class SimpleClient {
public:
  virtual int GetProgress() const = 0;
  virtual char* CutPrefix(char* data) = 0;
  virtual ~SimpleClient() {}
};
std::shared_ptr<SimpleClient> CreateSimpleClient();
#endif  // TEST_CLIENT_H_

客户端.cpp

#include "client.h"
namespace {
class SimpleClientImpl : public SimpleClient {
private:
  int progress_counter_;
public:
  SimpleClientImpl() : progress_counter_(0) {}
  int GetProgress() const;
  char* CutPrefix(char* data);
};
int SimpleClientImpl::GetProgress() const {
  return progress_counter_;
}
char* SimpleClientImpl::CutPrefix(char* data) {
  progress_counter_++;
  return data + *reinterpret_cast<size_t*>(data) + sizeof(size_t);
}
}  // namespace
std::shared_ptr<SimpleClient> CreateSimpleClient() {
  return std::shared_ptr<SimpleClient>(new SimpleClientImpl);
}

我试图编译:g++-c客户端.cpp,得到以下错误

在客户端.cpp中包含的文件中:2:client.h:13:错误:在"~<™代币client.cpp:27:错误:在"~<™代币

我从各种帖子中了解到我应该与鹅库链接,但不知道如何使用它。

这是我使用的编译器版本:

g++-v使用内置规格。目标:x86_64-redhat-linux配置为:/configure--prefix=/usr/mandir=/usr/share/man--infodir=/usr/share/info--使用bugurl=http://bugzilla.redhat.com/bugzilla--enable bootstrap--enable shared--enable threads=posix--enable checking=release--with system zlib--enable-_cxa_atexit--disable libunvell exceptions--enable gnu unique object--enable languages=c,c++,objc,obj-c++,java,fortran,ada--启用java awt=gtk--禁用dssi--使用java home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre--启用libgcj multifile--启用java maintainer模式--使用ecj jar=/usr/share/java/eclipse-ecj.jar--禁用libjava multilib--使用ppl--使用cloog--使用tune=generic--使用arch_32=i686--构建=x86_64-redhat-linux螺纹型号:posixgcc版本4.4.5 20101112(Red Hat 4.4.5-2)(gcc)

有人能帮我吗。

对于这么旧的编译器,您可能应该在编译器标志中添加-std=c++0x,而不是-std=c++11。