c++中未定义结构指针名称的typdef是如何工作的
How does typdef of an undefined struct pointer name work in C++?
让我借助代码来解释这个问题。
我有以下两个文件。
猫a.h
typedef struct myIterStruct* myIter;
class myIterator;
class myList
{
int mVal;
myList* mNext;
friend class myIterator;
public:
myList(myList* next, int val) : mVal(val), mNext(next) {}
~myList() {}
void AddTail(int val) {
myList* newnode = new myList(NULL, val);
myList* tail = this->GetTail();
tail->mNext = newnode;
}
myList* GetTail() {
myList* node = this;
while (node->mNext)
node = node->mNext;
return node;
}
myList* GetNext() { return mNext; }
int GetVal() { return mVal; }
};
class myIterator
{
myList* mList;
public:
myIterator(myList* list) : mList(list) {}
~myIterator() {}
int next() {
int ret = -1;
if (mList) {
ret = mList->GetVal();
mList = mList->GetNext();
}
return ret;
}
};
猫main.cxx
#include <iostream>
#include "a.h"
using namespace std;
myIter createIterator(myList* list)
{
myIterator *returnitr = new myIterator(list);
return (myIter) returnitr;
}
int myListGetNextNode(myIter iter)
{
if (iter == NULL)
return -1;
myIterator* funciter = (myIterator *) iter;
return funciter->next();
}
int main()
{
myList* list = new myList(NULL, 1);
list->AddTail(2);
list->AddTail(3);
myIter iter = createIterator(list);
int val = -1;
while((val = myListGetNextNode(iter)) != -1) {
cout << val << 't';
}
cout << endl;
return 0;
}
这段代码在一个项目中用于实现列表和迭代器。我无法理解的是a.h文件中的第一行:"typedef struct myIterStruct *myIter;"
在代码中,结构体myIterStruct的定义没有写在任何地方,但这段代码仍然可以编译并运行良好。
c++编译器是否将未定义的struct指针转换为void*?或者这是特定于我正在使用的g++编译器吗?请详细说明。谢谢。
只要知道myIterStruct
是一个类或结构体就足够了。当编译器看到struct myIterStruct
时,它知道这一点,并且可以形成一个指向它的指针。
这个必须起作用的规则,间接地强制编译器对所有指向类/结构的指针使用相同的大小。
其他一些指针,特别是void*
和char*
,在一些不寻常的系统上可能会使用额外的字节。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 链表c++插入,所有情况都已检查,但没有任何工作
- 当 int 方法工作正常时,void 方法有何不同,或者为什么我不能调用 void 方法?