mt19937不是std可能的makefile问题的成员

时间:2017-02-27 13:08:10

标签: makefile g++

在我的程序中,我使用std :: mt19937生成随机数。在两个系统(最新的Windows和ubuntu)上,程序编译得很好。但是,在第三个未知系统(使用make)上,我收到错误消息: " ' mt19937'不是' std'的成员"

我假设makefile没有正确写入。我是makefiles的新手,不知道从哪里开始。我需要强制执行c ++ 11吗?我该怎么做?

all:

%.o: %.cc
    g++ -c -O2 -Wall -Wextra -pedantic $<

library-objects = \
    BigUnsigned.o \
    BigInteger.o \
    BigIntegerAlgorithms.o \
    BigUnsignedInABase.o \
    BigIntegerUtils.o \

library-headers = \
    NumberlikeArray.hh \
    BigUnsigned.hh \
    BigInteger.hh \
    BigIntegerAlgorithms.hh \
    BigUnsignedInABase.hh \
    BigIntegerLibrary.hh \

library: $(library-objects)

$(library-objects): $(library-headers)

# Components of the program.
program = rsa435
program-objects = rsa435.o

$(program-objects) : $(library-headers)

$(program) : $(program-objects) $(library-objects)
    g++ $^ -o $@

clean :
    rm -f $(library-objects) $(testsuite-cleanfiles) $(program-objects) $(program)

all : library $(program)
编辑:可能值得一提的是我有cc文件和cpp文件。也许这也引起了一个问题?

2 个答案:

答案 0 :(得分:1)

错误在于它知道&#34; std&#34;命名空间但没有&#34; mt19937&#34;在该命名空间中定义。

添加&#34; -std = c ++ 11&#34;到你的g ++命令行,因为直到C ++ 11才定义mt19937。

(信用:这最初由Richard Critten发布,作为对该问题的评论。)

此外,您可能需要添加此头文件:

#include <random>

答案 1 :(得分:1)

“-std = c ++ 11”还不够,请添加#include<bits/stdc++.h>