如何初始化用作函数参数的 class 类型
How to initialize a class type used as a function parameter
我正在尝试处理 HDL 到 C++ 的转换,但遇到了一些障碍。
在 Ubuntu 上使用 Verilator 进行转换很容易,但是一种数据类型让我很烦。
层次结构中的顶级代码是...
#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
不是您的 class VdorQ24
的实例,它是指向您的 class.
的指针
如果要初始化变量,请将其设置为 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};
我正在尝试处理 HDL 到 C++ 的转换,但遇到了一些障碍。 在 Ubuntu 上使用 Verilator 进行转换很容易,但是一种数据类型让我很烦。
层次结构中的顶级代码是...
#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
不是您的 class VdorQ24
的实例,它是指向您的 class.
如果要初始化变量,请将其设置为 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};