Я пытаюсь справиться с преобразованиями 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?*/;
Ваш пример не завершен, но это может вам помочь.
Ваша переменная 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};
Других решений пока нет …