Как инициализировать тип класса, используемый в качестве параметра функции
Я пытаюсь справиться с преобразованиями HDL в C++ и натолкнулся на некоторую загадку. Преобразование с использованием Verilator в Ubuntu достаточно простое, но меня раздражает один тип данных.
Верхний код в иерархии...
#include <iostream>
#include "VDorQ24Syms.h"
#include "VDorQ24.h"
using namespace std;
// FUNCTIONS
VDorQ24Syms::VDorQ24Syms(VDorQ24* topp, const char* namep)
// Setup locals
: vm_namep(namep)
, vm_activity(false)
, vm_didInit(false)
// Setup submodule names
{
// Pointer to top level
tOPp = topp;
// Setup each module's pointers to their submodules
// Setup each module's pointer back to symbol table (for public functions)
tOPp->Vconfigure(this, true);
// Setup scope names
}
Передача данных в функцию
VDorQ24Syms::VDorQ24Syms(VDorQ24* topp, const char* namep)
это то, что я не получаю. Второй параметр легко понять. Во-первых, не так уж и много.
Под этим я подразумеваю, что ожидает от меня компилятор? Какой тип данных?
Я хочу передать данные так...
VDorQ24* randomCharacter;
if (VDorQ24Syms(randomCharacter, szAscii) == /*condition*/)
{
return /*value*/;
}
Но "randomCharacter" неинициализирован.
VDorQ24* randomCharacter = /*How do I initialize this?*/;
1 ответ
Ваш пример не завершен, но это может вам помочь.
Ваша переменная randomCharacter
не экземпляр вашего класса VdorQ24
это указатель на ваш класс.
Если вы хотите инициализировать вашу переменную, установите ее в nullptr
:
VdorQ24* randomCharacter = nullptr; // now you can be 100% certain that it's null.
Если вы на самом деле хотели создать новый экземпляр VdorQ24
Вы можете просто забыть об указателе и использовать значения. Здесь мы вызываем конструктор по умолчанию:
// Not a pointer, initialize the instance of your class directly.
VDorQ24 randomCharacter;
// v---- Here we send a pointer to your variable using the '&' operator.
if (VDorQ24Syms(&randomCharacter, szAscii) == /*condition*/)
{
return /*value*/;
}
Если вы хотите отправить параметр в конструктор, вы можете использовать этот синтаксис:
VDorQ24 randomCharacter{param1, param2};
Фактически, любой тип может быть инициализирован с этим синтаксисом, даже int и массивы:
int a{1};
float b[] = {1.f, 2.f, 3.f};