shared_ptr使用gcc编译器

时间:2015-10-19 02:08:10

标签: c++ c++11 gcc mingw

我正在尝试在c ++中使用shared_ptr。我正在使用MinGw gcc编译器。

我的g ++版本是4.8.1。

当我尝试使用std :: shared_ptr时,它表示它没有命名类型。

这是因为它是c ++ 11的一部分,而我正在使用的编译不支持吗?

或者我是否需要设置标志才能使用c ++ 11功能?

编辑:我尝试添加标志以启用c ++到我的makefile,它仍然会出错。

我使用shared_ptr的标题如下

#pragma once

#include <vector>
#include <memory>

namespace WavFileTools
{
    class WavFile;
}

class WavFileTools::WavFile
{

    public: 

        typedef std::vector<unsigned char> PCMData8_t;
        typedef std::vector<unsigned short int> PCMData16_t;

        struct WavFileHeader {

            int num_channels;
            int sample_rate;
            int bits_per_sample;
        };

        static std::shared_ptr<WavFile> LoadWavFromFile(std::string filename);

    private:
        WavFile(void);  

    private:                
        WavFileHeader m_header;
        PCMData16_t m_data16;
        PCMData8_t m_data8;
};

和makefile ......

CC := g++
CFLAGS := -g -O2 -std=c++0x
BIN_DIR := bin
BUILD_DIR := build
SRC_DIR := src
MAIN := WavFileTool
TARGET := wavfiletool.exe
SOURCES := $(wildcard src/*.cpp)
OBJECTS := $(SOURCES:$(SRC_DIR)/%.cpp=$(BUILD_DIR)/%.o)

$(BIN_DIR)/$(TARGET): CREATE_DIRS $(BUILD_DIR)/$(MAIN).o $(OBJECTS) 
    $(CC) $(OBJECTS) $(CFLAGS)  -o $@ 

$(BUILD_DIR)/$(MAIN).o: $(SRC_DIR)/WavFileTool.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
    $(CC) $(CC_FLAGS) -c -o $@ $<

CREATE_DIRS: 
    if not exist $(BIN_DIR) mkdir $(BIN_DIR)
    if not exist $(BUILD_DIR) mkdir $(BUILD_DIR)

CLEAN:
    if exist $(BIN_DIR) rmdir /Q /S  $(BIN_DIR) # /S allows deleting non-empty folder, and /Q prevents confirmation required
    if exist $(BUILD_DIR) rmdir /Q /S $(BUILD_DIR)

和错误

In file included from src/WavFile.cpp:1:0:
src/WavFile.h:26:10: error: 'shared_ptr' in namespace 'std' does not name a type
   static std::shared_ptr<WavFile> LoadWavFromFile(std::string filename);

0 个答案:

没有答案