简体   繁体   中英

How to access a struct from a class?

I was reading a block of codes from a C++ book, and trying to compile it using g++

Here was the error: main.cpp:11:3: error: 'link' does not name a type main.cpp: In constructor 'linklist::linklist()': main.cpp:15:4: error: 'first' was not declared in this scope

So it seems like the linklist class doesnt recognize the link struct, why?

code:

#include <iostream>
using namespace std;
struct link //one element of list
{
    int data; //data item
    link* next; //pointer to next link
};
class linklist //a list of links
{
    private:
        link* first; //pointer to first link   !!!!!!!!Here is the first error ~!!!!!!!!!!!
    public:
        linklist() //no-argument constructor
        {
            first = NULL;
        } //no first link
        void additem(int d); //add data item (one link)
        void display(); //display all links
};
void linklist::additem(int d) //add data item
{
    link* newlink = new link; //make a new link
    newlink->data = d; //give it data
    newlink->next = first; //it points to next link
    first = newlink; //now first points to this
}
void linklist::display() //display all links
{
    link* current = first; //set ptr to first link
    while( current != NULL ) //quit on last link
    {
    cout << current->data << endl; //print data
    current = current->next; //move to next link
    }
}
int main()
{
        linklist li; //make linked list
        li.additem(25); //add four items to list
        li.additem(36);
        li.additem(49);
        li.additem(64);
        li.display(); //display entire list
        return 0;
}

The problem is that the name link is conflict with a function named link in unistd.h. Try with g++ on the OS X.

As far as I can tell you are probably building this as C code, if I build using g++ it works just fine but if I use gcc the first error is:

error: 'link' does not name a type

So I can reproduce this on g++ by adding:

#include <unistd.h>

So it looks like the name link conflicts with something in that header file. Renaming link to another name seems to fix the issue.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM