C ++ Vector错误,显示变量是模糊的 - 我已经尝试了一切仍然没有希望

时间:2015-08-14 09:37:20

标签: c++ eclipse c++11 vector

我正在使用带有C ++ ADT的eclipse luna 我已经设置编译器将c ++ 11和微处理器以及项目设置的路径编译为c ++ 11

我正在尝试创建一个简单的向量,我收到的错误显示:

a2' is ambiguous '
Candidates are:
 vector(unsigned int, const std::allocator<double> &)
 vector(unsigned int, const double &, const std::allocator<double> &)
'

我写的代码是:

#include<iostream>
#include<vector>
#include<array>

int main(){
    using namespace std;
    double a1[4] = {1.2,2.4,3.6,4.8};
    vector<double> a2(3);

    array<double,5> a3;

}

数组工作正常,但矢量出现错误。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

忽略double a1 = {1.2,2.4,3.6,4.8};

vector<double> a2(3);中,编译器试图找出你想要调用的构造函数,以及你的实现有两个候选者:

vector(unsigned int, const std::allocator<double> &)
vector(unsigned int, const double &, const std::allocator<double> &)

你只想预留空间吗?

vector<double> a2{};
a2.reserve(3);

或者用3个元素初始化?

vector<double> a2{ 1.0, 2.0, 3.0 };

答案 1 :(得分:1)

从我的问题中我可以收集到的内容,您希望创建一个包含3个double元素的向量,这些元素已默认初始化?

使用标准库时,最好习惯cppreference之类的文档。如果我们查看std::vector::vector on cppreference的文档,我们可以看到我们想要的构造函数具有以下签名:

explicit vector( size_type count );

因此,我们可以执行以下操作来实现您的目标(Ideone here):

#include <vector>

int main()
{
    std::vector<double> ourVec( 3U ); // Will result in 3 default-intialized doubles
}

更常见的是,我们希望初始化具有某些值的元素(0.0可能是一个不错的选择),查看cppreference,我们可以看到以下原型:

explicit vector( size_type count, 
                 const T& value = T(),
                 const Allocator& alloc = Allocator());

我们可以使用以下代码(Ideone is here)显示此作品:

#include <vector>

int main()
{
    std::vector<double> ourVec( 3U, 0.0 ); // Will result in {0.0, 0.0, 0.0}
}

如果您希望在初始化向量时显式指定元素,可以使用std::initializer_list构造函数来使用它:

vector( std::initializer_list<T> init, 
        const Allocator& alloc = Allocator() );

我们可以使用如下(Ideone):

#include <vector>
int main() 
{
    std::vector<double> ourVec = {1.2, -1.9, 0.1, 0.0} 
}