2014-11-04 2 views
0

client.hКак скомпилировать программу, которая использует shared_ptr?

#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); 
} 

Я попытался скомпилировать: г ++ -c client.cpp и получил под ошибкой

В файле включены из client.cpp: 2 : client.h: 13: ошибка: ожидаемый конструктор, деструктор или преобразование типа до «<» токен client.cpp: 27: ошибка: ожидаемый конструктор, деструктор или преобразование типа до «»â ™ token

Я понял из различных сообщений, которые мне нужно связать с библиотекой гуся, но не знаю, как их использовать.

это версия компилятора я использую:

г ++ -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 version 4.4. 5 20101112 (Red Hat 4.4.5-2) (GCC)

Может ли кто-нибудь помочь мне, пожалуйста.

+3

Вам необходимо передать флаг '-std = C++ 11' (или более поздней версии) в gcc, предполагая, что версия libstdC++ в комплекте с gcc 4.4.5 включает даже' std :: shared_ptr'. – user657267

ответ

1

Для компилятора, которому вы, вероятно, должны добавить -std = C++ 0x вместо -std = C++ 11 в флагов компилятора.

Смежные вопросы