我如何指向另一个类中的向量?

时间:2012-11-03 14:01:06

标签: c++

我有一个包含vector的类,它也继承了另一个类:

class txtExt : public extention
{
private:
   string  openedFile_;
public:
   vector<string> txtVector; //the vector i want to call
};

我在一个类中的方法中填充向量:

class Manager : public extention
{
   // there is some other code here that I know does work
   // and it calls this function:
   void organizeExtention(string filename, string ext)
   {
      if(ext == "txt")
      {
         txtExt txtExt;
         txtExt.txtVector.pushback(filename);
      }
   }
}

这是我尝试调用向量的主要类:

int main()
{
   // some code here that does previous operations like getting the path
   // and filling the vector


   // I've tried many ways of trying to call the vector
   // here is an example of one:
   vector<txtExt*> testVector;
   for(int i = 0; i < testVector.size(); ++i)
   {
      cout << testVector[i] << endl;
   }
   return 0;
}

我有几个问题:

  1. 我是否错误地调用了向量?
  2. 我的矢量是空的吗?
  3. 我是否必须使我的矢量全局化,所以其他类可以看到它?
  4. 注意:我已经能够使用一个非常简单的for循环打印出载入载体的向量

2 个答案:

答案 0 :(得分:1)

好吧,正如所说的那样,你发布的代码中有一些错误,你也可能会有一些误解。但要回答问题,这个

testVector[i]->txtVector

是访问每个txtVector对象中的txtExt对象的方法。

如果这对您不起作用,那是因为您的代码中存在其他错误/误解之一。

答案 1 :(得分:0)

总结:

重读好的C ++书籍的第一章(The Definitive C++ Book Guide and List),然后尝试修复你的程序并处理每个错误。

您的代码中存在多个错误。

  • 首先,对于txtExt *类型的打印实体,没有运算符<<
  • 即使txtExt类型的对象也不能像那样打印。
  • 另外,你创建的testVector是空的,所以没有.size()将为零,并且没有循环。
  • 您真的确定要继承“扩展”中的课程吗?
  • 您无法调用矢量,您可以访问它。
  • 公开数据成员(如向量)不是一个好主意。
  • 使用与类相同的名称调用变量是一个非常糟糕的主意。

我无法猜测代码应该做什么。以下是您需要了解的一个简单示例:

#include <iostream>
#include <vector>
#include <string>

class TxtExt 
{
public:
  std::vector<std::string> txtVector; 
};

int main(){
  TxtExt oneTxtExt;

  oneTxtExt.txtVector.push_back("hello");
  oneTxtExt.txtVector.push_back("world");
  for( auto &i : oneTxtExt.txtVector ){
    std::cout << i <<std::endl;
  }
}

以下代码是正确的,但绝对没有效果。你也可以写{}

{
  TxtExt TxtExt;
  TxtExt.txtVector.pushback(filename);
}

你在这里创建一个新对象,推回它(顺便说一下,它被称为push_back),然后在范围的末尾销毁对象。另外,不要将对象命名为与类相同的对象,它会变得非常混乱。