运行时在构造函数中初始化向量类成员——C++

Posted

技术标签:

【中文标题】运行时在构造函数中初始化向量类成员——C++【英文标题】:Initializing a vector class member in the constructor during run time -- C++ 【发布时间】:2020-04-21 06:51:42 【问题描述】:

我对 C++ 还是很陌生。

我的类构造函数似乎无法初始化向量类成员时遇到问题。 构造函数需要读取文件,收集一些数据,然后在运行时期间调整向量的大小。

我创建了一个更简单的示例来关注这个问题。

这是头文件(test.h):

// File Guards
#ifndef __TEST_H
#define __TEST_H

// Including necessary libraries
#include <vector>

// Use the standard namespace!
using namespace std;

// Define a class
class myClass

    // Public members
    public:

        // vector of integers 
        vector<int> vec;

        // Declare the constructor to expect a definition
        myClass();
;

// Ends the File Guard
#endif

这是源文件:

// Including the necessary headers
#include <iostream>
#include "test.h"

// Defining the constructor
myClass::myClass()

    // Loop control variable
    int i;

    // For loop to iterate 5 times
    for (i = 0; i < 5; i++)
    
        // Populating the vector with 0s
        vec.push_back(0);
    


// Main function to call the constructor
int main()

    // Create a "myClass" object
    myClass myObject;

    // iterating through the vector class member
    for (int x : myObject.vec)
    
        // Outputting the elements
        cout << x + " ";
    

    // Return statement for main function
    return 0;

我希望打印五个 0,但实际上什么也没发生。我已经考虑了一段时间,还没有找到解决方案。关于这里发生了什么的任何想法?

【问题讨论】:

错字? cout &lt;&lt; x &lt;&lt; " " 而不是 cout &lt;&lt; x + " "? 附带说明一下,这里的调试可能对您有所帮助 在一个不相关的注释中,所有以双下划线开头的符号(甚至是预处理器宏)都是保留的。你永远不应该自己定义这样的符号。参见例如What are the rules about using an underscore in a C++ identifier? 了解更多信息。 【参考方案1】:

看来问题出在这一行

cout << x + " ";

您不应在x 中添加空格。

应该是cout &lt;&lt; x &lt;&lt; " ";

【讨论】:

感谢您的快速回复!这样可行。虽然我不肯定当我将它应用到更大的程序时它会起作用。我会测试一下。 @Ryan 请返回您的教科书或教程并再次阅读有关将输出写入cout 的内容。如果它告诉您使用x + " " 打印一个整数后跟一个空格,那么我会感到非常惊讶。表达式x + " " 会产生一个字符串,但它会是一个无效的字符串并导致undefined behavior 是的,这是我的错误语法错误。不过,问题是,对评论的数量有什么看法吗?我基本上在程序的每一行都使用注释。 @Ryan 在我看来评论太多了。我很想给出一个解释,但是在这个答案的评论中这样做是行不通的,并且发布一个新的答案将与你原来的问题无关。您可能在 SO 上发布一个新问题,但它可能会因为过于“基于意见”而被关闭。 --- 所以 - 我可以建议发布你的代码并询问它对 codereview.stackexchange.com 的评论 --- 那里的许多人在 SO 上都是同样乐于助人的人。 @Ryan 关于评论,对于像myClass myObject; 这样的声明,它的作用非常清楚,添加像// Create a "myClass" object 这样的评论只是告诉我们我们已经清楚地看到了什么。对难以理解的代码的注释,或者解释为什么选择一种解决方案而不是其他可能的解决方案,或者复杂的函数做了什么,它们可能返回什么,以及参数是什么,这些都是很好的 cmets。

以上是关于运行时在构造函数中初始化向量类成员——C++的主要内容,如果未能解决你的问题,请参考以下文章

C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???

C++:首先调用/初始化哪个?其成员变量的类构造函数或构造函数?

在构造函数中初始化成员变量二维向量

如何验证 C++ 构造函数中的输入参数?

C++中如何在子类的构造函数中调用基类的构造函数来初始化基类成员变量

如何在 C++ 的外部类构造函数中初始化嵌套类成员