如何编译使用shared_ptr的程序?

时间:2014-11-04 04:47:53

标签: c++ c++11 gcc

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_

Client.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 client.cpp并得到以下错误

在client.cpp中包含的文件中:2: client.h:13:错误:在'&lt;'令牌之前的预期构造函数,析构函数或类型转换 client.cpp:27:错误:在“&lt;”令牌之前预期的构造函数,析构函数或类型转换

我从各个帖子中了解到我应该与鹅图书馆联系,但不知道如何使用它。

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

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

请有人帮帮我。

1 个答案:

答案 0 :(得分:1)

对于较旧的编译器,您应该将-std = c ++ 0x而不是-std = c ++ 11添加到编译器标志中。