【问题标题】:C++ Instance variable/pointer to an array in the heapC++ 实例变量/指向堆中数组的指针
【发布时间】:2011-07-17 23:11:43
【问题描述】:

我有一个动态的结构数组。当我说动态时,我的意思是每次运行程序时元素的数量都会有所不同。在尝试将实例变量用作数组时遇到了困难,我遇到了 不兼容的类型 问题。还有其他方法吗?

我有这个结构:

struct movie
  {
    int rank;
    string title;
    string distributor;
    string weekend;
    string total;  
} ;

我有这个类头文件:

class ReadFile{

public:
    ifstream moviesFile;
    movie movies[];  

    ReadFile(string);
    movie handleLine(string);
    string getString(vector<char>);

};

这就是我尝试实例化 movies 实例变量的方式:

//Some code
movie temparray[linecount];
//temparray is filled with various movie structures.
movies = temparray;

这是我得到错误的时候。我将如何完成实例化电影数组的任务。谢谢!

【问题讨论】:

  • 在格式化问题而不是使用 HTML 标记时,选择代码并按 CTRL+K 使其正确格式化。
  • ReadFile 作为(非函子)类的名称听起来有些可疑。精心设计的类通常代表名词,而不是动词。

标签: c++ arrays instance-variables


【解决方案1】:

数组是不可修改的左值,所以你不能分配给它们

所以movies = temparray; 是非法的

在 C++ 中,始终建议您使用 std::vector 而不是 C 样式数组

//....
public:
    ifstream moviesFile;
    std::vector<movie> movies;  

//....

//Some code
 movie temparray[linecount];
 movies.assign(temparray, temparray+linecount);

【讨论】:

  • 大声笑,这很有道理!我试图让事情变得比他们应该的更复杂!非常感谢!
  • 在这种情况下,是的,std::vector 可能会更好,但并不总是推荐使用 C 样式数组...
【解决方案2】:

您不能在 C++ 中定义未知大小的数组,请使用std::vector&lt;movie&gt; movies; 创建动态数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多