Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我可以在不首先定义结构的情况下创建结构的std::vector吗?_C++_Stl - Fatal编程技术网

C++ 我可以在不首先定义结构的情况下创建结构的std::vector吗?

C++ 我可以在不首先定义结构的情况下创建结构的std::vector吗?,c++,stl,C++,Stl,而不是: struct MyStruct{ ... }; std::vector<MyStruct> myVec; struct MyStruct{ ... }; std::载体myVec; 我可以做一些类似于: std::vector<struct MyStruct {...}> myVec; std::vector myVec; 甚至,因为我不需要这个结构的名称,因为我只在这个向量中使用它: std::vector<struct {...}&g

而不是:

struct MyStruct{
    ...
};

std::vector<MyStruct> myVec;
struct MyStruct{
...
};
std::载体myVec;
我可以做一些类似于:

std::vector<struct MyStruct {...}> myVec;
std::vector myVec;
甚至,因为我不需要这个结构的名称,因为我只在这个向量中使用它:

std::vector<struct {...}> myVec?
std::vector myVec?
我用C++多年了,我认为这是不可能的。不过我想这会很好


还是有办法?

< St>No>强>,当你声明一个实际变量或类型时,你不能这么做,因为C++是一种静态类型的语言。允许一般类型的C++构造是模板,即

template<typename T>
using myVec = std::vector<T>;
模板
使用myVec=std::vector;
你可以直接使用,例如

struct someStruct { /* ... */ };
myVec<someStruct> foo;
struct someStruct{/*…*/};
myVec foo;
或者在一些模板代码中

template<typename T>
T bar(myVec<T> const&vec)
{
    /* ... */
}
模板
T形杆(myVec常量和vec)
{
/* ... */
}

上次我检查时,存储在标准容器中的任何类型(不知道为什么引用STL,它类似但不同,并且在任何情况下都不明确!)都必须完整。(forwand-)声明的类型不完整。如果你想知道,请检查你正在使用的版本的标准,或者至少在这里提及


关于模板参数中结构的内联声明,例如,
g++
在我尝试时说“类型可能不在模板参数中定义”。我不能给你一个令人信服的理由,为什么那不起作用。毕竟,所有容器都提供了一个<代码> EntEngType < /Calp>别名,以及从C++ 11中的<代码> Auto <代码>,这不应该是一个问题。

< P>两个前面的答案都是正确的,你不能定义一个不完整类型的向量。 但是,您可以声明一个,要求定义时类型必须完整

struct Foo; // forward declaration
using FooV = std::vector<Foo>; // declaration

struct Foo { int val; }; // definition
FooV v; // define a vector - all is well.
struct Foo;//远期申报
使用FooV=std::vector;//公告
结构Foo{int val;};//释义
foovv;//定义一个向量——一切都很好。

你不能这样做,除非你解决了<代码> STD::tuple < /Cord>。我不知道C++是静态类型的语言。你不能使用它们,因为它们没有链接(即,你找不到Cor或Dor)我不确定你想说什么。@ Atyel.In模板被实例化时,它会将该类型作为符号。模板参数中声明的结构未命名,因此它们没有符号名,因此不能用于实例化模板(因为类名包含传递给它的符号,而且它也不能使用结构的任何成员,因为它无法按名称找到它们)。它们“没有联系”。