在.h中声明STL数据结构,如Vector 我试图声明一个私有数据结构,比如我的C++头文件中的向量,我希望最终在我的.CPP ./P>的方法实现中使用。

在.h中声明STL数据结构,如Vector 我试图声明一个私有数据结构,比如我的C++头文件中的向量,我希望最终在我的.CPP ./P>的方法实现中使用。,c++,data-structures,vector,header-files,C++,Data Structures,Vector,Header Files,例如,我的标题“SomeClass.h”,其中我有: class SomeClass { private: Vector<T> myVector; public: void AddTtoMyVector(T add); } 这里的语法有效吗?或者有其他方法来声明和填充这样的结构吗?请确保指定您使用的是STL的向量,使用 std::vector<T> myVector; 另外,如果T是泛型类型,则希望将整个类模板化: #include <vecto

例如,我的标题“SomeClass.h”,其中我有:

class SomeClass
{
  private:
  Vector<T> myVector;
  public:
  void AddTtoMyVector(T add);
}

这里的语法有效吗?或者有其他方法来声明和填充这样的结构吗?

请确保指定您使用的是STL的向量,使用

std::vector<T> myVector;
另外,如果
T
是泛型类型,则希望将整个类模板化:

#include <vector>

using std::vector;

template< typename T >
class SomeClass
{
  private:
  vector<T> myVector;
  public:
  void AddTtoMyVector(T add) {myVector.push_back( add );}
}
#包括
使用std::vector;
模板
上课
{
私人:
向量myVector;
公众:
void AddTtoMyVector(T add){myVector.push_back(add);}
}

请确保指定您正在使用STL的向量,使用

std::vector<T> myVector;
另外,如果
T
是泛型类型,则希望将整个类模板化:

#include <vector>

using std::vector;

template< typename T >
class SomeClass
{
  private:
  vector<T> myVector;
  public:
  void AddTtoMyVector(T add) {myVector.push_back( add );}
}
#包括
使用std::vector;
模板
上课
{
私人:
向量myVector;
公众:
void AddTtoMyVector(T add){myVector.push_back(add);}
}


<>代码> >在ARTEM的答案之后,应该提到,虽然对于普通C++类的标准实践是将声明放入.h文件和CORESPOMPIN .CPP文件中的实现,但这通常仅适用于<强>非模板< /强>类。如果您正在编写模板类,则整个实现通常放在定义模板接口的同一个.h文件中。这样做有很多原因,如果您计划开发一个模板,我建议您先进一步研究这个问题。下面的AcTEM的答案,应该提到,虽然标准C++类的标准做法是将声明放入.h文件中,而在CordsPosi.CPP文件中实现,这通常只适用于<强>非模板< /强>类。如果您正在编写模板类,则整个实现通常放在定义模板接口的同一个.h文件中。这样做有很多原因,如果您计划开发一个模板,我建议您先进一步研究这个问题。这可能会为您节省一些时间。

您是指通用类型
T
(即模板)还是“对于某些具体类型
T
”?您是指std::vector。如果不是,矢量是什么。这是std::vector,T是一些具体类型,例如结构、int或其他数据类型。您是指泛型
T
(即模板)还是“对于某些具体类型
T
”?您是指std::vector。如果不是,矢量是什么。这是std::vector,T是一些具体的类型,例如struct、int或其他数据类型。因此,在完全C++无知的情况下,声明是否可能存在于.h和实现中,是否存在于.CPP中?我画了一个与C#类似的例子,在C#中,我们在接口中有函数签名,在实现接口的类中有声明。是的,实现可以移动到.cpp文件,就像你在最初的帖子中写的那样(虽然通常的做法是在.h文件中保留一行程序,但编译器通常会内联此类函数)。是的,这是典型的做法。在某些情况下,实现必须在头中[特别是模板代码和内联函数],但总的来说这不是真的。谢谢Artem。我的另一个问题是,为什么我们需要指定“使用std::vector”?包含的不是告诉编译器正在使用STL向量吗?查找名称空间,以及它们是如何使用的。全名是
std::vector
,因此
vector
对于具有谢谢你的暗示,谢谢ARTEM。因此,从纯粹的C++无知说起,声明可能是在H中实现的,而在.CPP中实现的呢?我正在与C语言并行,我们在接口中有函数签名,在实现接口的类中声明。可以将实现移动到.cpp文件中,就像您在原始帖子中所写的那样(尽管通常的做法是在.h文件中保留一行程序;编译器通常会内联此类函数)。是的,这是典型的操作方式。有些情况下,实现必须位于头中[特别是模板代码和内联函数],但总的来说这不是真的。谢谢Artem。我的另一个问题是,为什么我们需要指定“使用std::vector”?包含的不是告诉编译器正在使用STL向量吗?查找名称空间,以及它们是如何使用的。全名是
std::vector
,因此
vector
对于具有请您给出一些关于您的意思的提示。谢谢Rakis。您能指出模板类实现与.h在同一个文件中的一些原因吗?模板类可能是一个具有中等到高复杂性的类,根据我使用其他面向对象语言(如C#)的经验,将定义与实现混合是不可取的大多数情况下,这是一个好主意。模板就是:模板。编译器根据需要根据模板创建全新的代码。但要做到这一点,它需要访问模板的整个代码,而不仅仅是函数名。您仍然可以分离实现,通常是通过“blah.h”底部的“include”blah.cppStroustroup的C++书(一个非常推荐的阅读)涵盖了基本的问题。我相信,网络搜索也会带来很多好的信息来源。从本质上讲,它是一个编译能力和项目组织的实际问题,而不是软件设计问题。