2016-11-15 16 views
0

Я хочу иметь простой примерный класс (поле), в котором есть векторный элемент данных, который хранит размеры окна. Я попытался закодировать класс таким образом, что вектор может быть передан ему как аргумент при создании экземпляра. Существует простая функция-член класса, предназначенная для распечатки вектора размеров. Когда я пытаюсь скомпилировать, мне предоставляется ошибка в запросе функции-члена, говорящей, что функция имеет тип «неклассический тип». Как мне подойти к этой ошибке?Функция класса-члена, приводящая к ошибке «неклассовый тип»

#include <iostream> 
#include <vector> 

using std::cout; 
using std::endl; 

class Box{ 
    public: 
     Box(
      std::vector<double> dimensions 
     ); 
     void display_dimensions(); 
    private: 
     std::vector<double> m_dimensions; 
}; 

Box::Box(
    std::vector<double> dimensions 
    ): 
    m_dimensions(dimensions){ 
    } 

void Box::display_dimensions(){ 
    for(unsigned int i = 0; i < m_dimensions.size(); i++){ 
     std::cout 
      << "element[" << i << "] = " << m_dimensions[i] 
      << std::endl; 
    } 
    std::cout << std::endl; 
} 

int main(){ 
    // Create an instance of a box and set its dimensions vector data member. 
    Box box_A(
     std::vector<double> dimensions = {78.0, 24.0, 18.0} // dimensions 
    ); 
    // Get the box instance to display its dimensions. 
    cout << "dimensions of box_A:" << endl; 
    box_A.display_dimensions() 
} 
+0

Способ, которым вы объявили 'box_A', является объявлением функции, которая возвращает' Box', и принимает 'std :: vector ' как аргумент, который имеет '{78.0, 24.0, 18.0} 'как значение по умолчанию. Итак - не экземпляр класса. Вы можете увидеть правильный способ экземпляра экземпляра класса в вашем примере: [здесь] (https://ideone.com/77CHTX). –

ответ

0

Это не так, как вы бы вызвать конструктор с аргументом:

Box box_A(
    std::vector<double> dimensions = {78.0, 24.0, 18.0} 
); 

Вы не можете вызвать конструктор (или какой-либо функции) с объявлением переменной, вы должны переместить его перед вызов и передать переменную:

std::vector<double> dimensions = {78.0, 24.0, 18.0}; 
Box box_A(dimensions); 

Или, вы можете создать временную переменную, используя список initalizer, чтобы позволить компилятору вывести тип:

Box box_A({78.0, 24.0, 18.0}); 
+0

Aha! Спасибо за это. Кажется, я думал в Python. Затем я попытаюсь использовать аргументы ключевых слов в C++ ... – d3pd