[英]How does typdef of an undefined struct pointer name work in C++?
讓我在代碼的幫助下解釋這個問題。
我有以下兩個文件。
貓啊
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;
}
此代碼在項目中用於實現列表和迭代器。 我無法理解的是 ah 文件中的第一行:“typedef struct myIterStruct *myIter;”
在代碼中,struct myIterStruct 的定義沒有寫在任何地方,但這段代碼仍然可以編譯並運行良好。
C++ 編譯器是否將未定義的結構指針轉換為 void*? 或者這是否特定於我正在使用的 g++ 編譯器? 請詳細說明。
謝謝。
知道myIterStruct
是一個類或結構就足夠了。 當編譯器看到struct myIterStruct
它知道並可以形成指向它的指針。
這必須工作的規則間接強制編譯器對所有指向類/結構的指針使用相同的大小。
其他一些指針,特別是void*
和char*
,可能會在一些不尋常的系統上使用額外的字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.