Инициализация члена векторного класса в конструкторе во время выполнения 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;
}

Я ожидал, что будет напечатано пять нулей, но вместо этого ничего не происходит. Я думал об этом некоторое время и еще не нашел решения. Любые идеи относительно того, что здесь происходит?


person Ryan    schedule 21.04.2020    source источник
comment
Опечатка? cout << x << " " вместо cout << x + " "?   -  person Some programmer dude    schedule 21.04.2020
comment
В качестве примечания, отладка могла бы помочь вам здесь   -  person Ap31    schedule 21.04.2020
comment
Кстати, все символы (даже макросы препроцессора), начинающиеся с двойного подчеркивания, зарезервированы. Вы никогда не должны определять такие символы самостоятельно. См., например. Каковы правила использования подчеркивания в Идентификатор C++? для получения дополнительной информации.   -  person Some programmer dude    schedule 21.04.2020


Ответы (1)


Похоже проблема именно в этой строке

cout << x + " ";

Вы не должны добавлять x с пробелом.

Должно быть cout << x << " ";

person artm    schedule 21.04.2020
comment
Спасибо за быстрый ответ! Это работает. Хотя я не уверен, что это сработает, когда я применю его к более крупной программе. Я проверю это. - person Ryan; 21.04.2020
comment
@Ryan Пожалуйста, вернитесь к своему учебнику или учебнику и снова прочитайте о записи вывода в cout. Если он скажет вам использовать x + " " для печати целого числа, за которым следует пробел, я буду очень удивлен. Выражение x + " " приведет к строке, но это будет недопустимая строка и приведет к неопределенное поведение . - person Some programmer dude; 21.04.2020
comment
Да, это была моя ошибка с плохим синтаксисом. Вопрос, однако, какие-либо мнения о количестве комментариев? В основном я использую комментарий к каждой строке своих программ. - person Ryan; 21.04.2020
comment
@Ryan По-моему, слишком много комментариев. Я хотел бы дать объяснение, но сделать это в этом комментарии к этому ответу не получится, и публикация нового ответа будет не по теме вашего первоначального вопроса. Вы можете опубликовать новый вопрос здесь, на SO, но он может быть закрыт как слишком основанный на мнении. --- Итак, могу ли я предложить опубликовать ваш код и попросить его комментировать на codereview.stackexchange.com --- многие люди на SO есть такие же полезные люди. - person Gavin Lock; 21.04.2020
comment
@Ryan Что касается комментария, то для такого утверждения, как myClass myObject;, довольно ясно, что оно делает, добавление комментария вроде // Create a "myClass" object просто говорит нам то, что мы уже ясно видим. Комментарии к коду, который трудно понять, или для объяснения того, почему вы выбираете одно решение вместо возможных других, или какие сложные функции делают и что они могут возвращать, и какие аргументы предшествуют, это хорошие комментарии. - person Some programmer dude; 26.04.2020