Question

So i have this simple data structure and I want to print all characters from it, but I can't assign n to n.next. I programmed in java a bit, and this kind of things worked. What is wrong with this code?

#include <iostream>
using namespace std;

struct node{
    char c;
    struct node *next;
    struct node *prev;
};

typedef struct node NODE;

void printnode(NODE n){
    while(n.next){
        cout << n.c;
        n=n.next;
    }
}
Was it helpful?

Solution 2

Try this:

void printnode(NODE* n){
  while(n->next){
    cout << n->c;
    n=n->next;
  }
}

It uses a pointer to access NODE.

In your version, you are are trying to assign a pointer to a non-pointer type:

void printnode(NODE n){    
  ...
  n = n.next; // error: n.next is of type NODE*, but n is a non-pointer NODE

OTHER TIPS

n is NODE which is struct node but n.next is struct node * so you can't assigne n.next to n.

To makes it works you can change you're functions argument to :

void printnode(NODE *n) {
    while (n->next != NULL) {
        cout << n->c;
        n = n->next;
    }
}

Note that we use the -> operator to access the members of a struct pointed to with a pointer.

To use a data pointed by a pointer (to dereference a pointer)

node* p;

you have to type:

p->next;

This is the correct version of your code:

void printnode( NODE *n) {
    while ( n->next != NULL) {
        cout << n->c;
        n = n->next;
    }
}

Your code snippet looks a lot like C rather than C++. Here's how you get your code to compile:

#include <iostream>
using namespace std;

struct node{
    char c;
    struct node *next;
    struct node *prev;
};

typedef struct node NODE;

void printnode(NODE* n){
    while(n->next){
        cout << n->c;
        n=n->next;
    }
}

...and here's what you really want, which does exactly the same thing with optimal efficiency and correctness.

#include <iostream>
#include <forward_list>

using namespace std;

using mylist_t = std::forward_list<char>;

void printList(const mylist_t& list){
    for(const auto& c : list) {
        cout << c;
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top