Как инициализировать тип класса, используемый в качестве параметра функции

#c #ubuntu #visual-c #hdl #verilator

#c #ubuntu #visual-c #hdl #средство проверки

Вопрос:

Я пытаюсь разобраться с преобразованиями 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. Указатель на VDorQ24 . Почему бы не посмотреть в "VDorQ24.h" заголовочном файле возможное определение класса?

2. Я переопределил проблему как способ инициализации переменной для передачи. Есть идеи?

3. @loumbut5 Ваша программа неправильно сформирована. Любое имя, начинающееся с двойного подчеркивания или с подчеркивания и заглавной буквы, зарезервировано для стандартной реализации. Это применимо к любой области.

4. Пожалуйста, опубликуйте минимальный, но полный пример кода. Это нам очень поможет, и мы могли бы помочь вам более эффективно.

Ответ №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 'amp;' operator.
if (VDorQ24Syms(amp;randomCharacter, szAscii) == /*condition*/)
{
    return /*value*/;
}
  

Если вы хотите отправить параметр в конструктор, вы можете использовать этот синтаксис:

 VDorQ24 randomCharacter{param1, param2};
  

Фактически, любой тип может быть инициализирован с помощью этого синтаксиса, даже int и arrays:

 int a{1};

float b[] = {1.f, 2.f, 3.f};