2015-08-05 3 views
1

Мне интересно, как я могу передать динамически выделенный массив структур из основной функции в функцию-член класса. Мне не обязательно менять значения в функции-члена, просто распечатайте его.Как передать динамический массив структур в функцию-член?

Если я делаю это как я бы с целым массивом в следующем фрагменте кода, я получаю, что MyStruct не определен в файлах MyClass.h и MyClass.cpp. (Что имеет смысл)
Если я включаю main.cpp в MyClass.h Получаю много странных ошибок. Другая идея заключалась в добавлении struct в параметр функции-члена, но это также привело к другим ошибкам.

Мне нужно объявить массив структуры вне класса, а не как член, и я не могу использовать контейнеры STL.

main.cpp:

#include "MyClass.h" 

int main() 
{ 
    MyClass my_class; 

    struct MyStruct 
    { 
     int a; 
     int b; 
    }; 

    MyStruct* struct_array = new MyStruct[4]; 
    // Fill struct array with values... 
    my_class.printStructArray(struct_array); 
} 

MyClass.h:

#include <iostream> 
class MyClass 
{ 
    // ... 
    void printStructArray(MyStruct* struct_array); 
}; 

MyClass.cpp:

#include "MyClass.h" 

void MyClass::printStructArray(MyStruct* struct_array) 
{ 
    std::cout << struct_array[0].a << struct_array[0].b; 
    // ... 
} 
+1

Почему вы не можете использовать стандартные контейнеры? – NathanOliver

+0

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

+1

Я гонг, чтобы позвонить в BS на тех, кто вам это сказал. Вектор должен быть таким же быстрым, как массив при компиляции с оптимизацией. Он был построен для замены динамических массивов DIY. – NathanOliver

ответ

1

Просто переместите struct определение в MyClass.h или это отдельный файл заголовка:

MyClass.h

#include <iostream> 

struct MyStruct { 
    int a, b; 
}; 
class MyClass { 
    // ... 
    void printStructArray(MyStruct* struct_array); 
}; 
+0

Это трюк, я полностью забыл, что вы можете определить материал внутри заголовочного файла класса или отдельный заголовочный файл, не делая его членом этого класса. Благодаря! –

Смежные вопросы