运行时在构造函数中初始化向量类成员——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 << x << " "
而不是 cout << x + " "
?
附带说明一下,这里的调试可能对您有所帮助
在一个不相关的注释中,所有以双下划线开头的符号(甚至是预处理器宏)都是保留的。你永远不应该自己定义这样的符号。参见例如What are the rules about using an underscore in a C++ identifier? 了解更多信息。
【参考方案1】:
看来问题出在这一行
cout << x + " ";
您不应在x
中添加空格。
应该是cout << x << " ";
【讨论】:
感谢您的快速回复!这样可行。虽然我不肯定当我将它应用到更大的程序时它会起作用。我会测试一下。 @Ryan 请返回您的教科书或教程并再次阅读有关将输出写入cout
的内容。如果它告诉您使用x + " "
打印一个整数后跟一个空格,那么我会感到非常惊讶。表达式x + " "
会产生一个字符串,但它会是一个无效的字符串并导致undefined behavior。
是的,这是我的错误语法错误。不过,问题是,对评论的数量有什么看法吗?我基本上在程序的每一行都使用注释。
@Ryan 在我看来评论太多了。我很想给出一个解释,但是在这个答案的评论中这样做是行不通的,并且发布一个新的答案将与你原来的问题无关。您可能在 SO 上发布一个新问题,但它可能会因为过于“基于意见”而被关闭。 --- 所以 - 我可以建议发布你的代码并询问它对 codereview.stackexchange.com 的评论 --- 那里的许多人在 SO 上都是同样乐于助人的人。
@Ryan 关于评论,对于像myClass myObject;
这样的声明,它的作用非常清楚,添加像// Create a "myClass" object
这样的评论只是告诉我们我们已经清楚地看到了什么。对难以理解的代码的注释,或者解释为什么选择一种解决方案而不是其他可能的解决方案,或者复杂的函数做了什么,它们可能返回什么,以及参数是什么,这些都是很好的 cmets。以上是关于运行时在构造函数中初始化向量类成员——C++的主要内容,如果未能解决你的问题,请参考以下文章
C++中的派生类,可以不定义对象直接调用基类的成员和调用自己的成员函数嘛???
C++:首先调用/初始化哪个?其成员变量的类构造函数或构造函数?