поведение кода странно - PullRequest
2 голосов
/ 24 февраля 2012

Я только что перешел на C ++ с C # Я написал код списка ссылок на C ++, запустил его в консольном приложении win32 и получал очень странные ошибки при сборке

Я указал 3 ошибки в комментариях, остальное я не могу напечатать, это слишком много.

using namespace std;

class float_list
{
     struct node
    {
        double data;
        struct node *next;
     };
        node *head;
public:

    float_list(void)
    {
        head = nullptr;
    };

    void appendNode(double);

};
//void float_list::appendNode(float num)
//{
//      
//}
void float_list::appendNode(double num)
    {
        node *newNode; 
        node *ptr; //here i am getting this Error error C3872:
                       //'0xa0': this character is not allowed in an identifier  , 
                       // how ever I changed its name again and again.  

        newNode = new node;
        newNode->data = num; // here un declared identifier ,
                         //also missing ; before this line 
        newNode->next = nullptr;


    if (!head)
    {       
        head = newNode;
    }
    else 
    {       
                ptr = head;     

                while (ptr->next)
                {
                ptr = ptr->next;
                ptr->next = newNode;
                };
        }
    }

Ответы [ 4 ]

8 голосов
/ 24 февраля 2012

Возможно, проблема не в идентификаторе, а в пробеле вокруг него. 0xA0 - это код Latin-1 для неразрывного кода пространство. Это не юридический характер ввода, и по какой-то причине Компилятор рассматривает его как часть идентификатора. Если больше ничего не работает, удалите строку и введите ее снова, убедившись, что все пробелы являются нормальными пробелами. (Я не уверен, что под Windows, но я думаю, что управляющее пространство или пространство сдвига войдет в неразрывное пространство.)

5 голосов
/ 24 февраля 2012

Другие помогли вам с недопустимым символом, который каким-то образом вставился в ваш код; но, кстати, я думаю, что есть ошибка в вашем последнем цикле while: ptr->next = newNode; должен быть вне цикла:

void float_list::appendNode(double num)
{
  // ... 
  if (!head)
  {     
    head = newNode;
  }
  else 
  {     
    ptr = head;     
    while (ptr->next)
    {
      ptr = ptr->next;
      // ptr->next = newNode;
    };
    ptr->next = newNode;  // here - at the end of the list
  }
}

Кроме того, лучше сохранить указатели заголовка и последнего узла для списка; таким образом вам не нужно будет пересматривать весь список снова и снова при каждом новом вызове до appendNode.

4 голосов
/ 24 февраля 2012

Ошибка с жалобой на символ 0xa0 и следующая ошибка с запятой, как я полагаю, вызваны символом, который был случайно скопирован в ваш код, который является символом Юникода, который вы не можете видеть,но только то, что вы не можете видеть это, не означает, что его там нет и он сеет хаос!

1 голос
/ 06 марта 2013

У меня была такая же проблема с символом 0xA0 без пробела.Я решил это, выделив один символ, скопировав его с помощью ^ C, а затем выполнив поиск и заменив все на обычный пробел.Вам нужно будет вставить неразрывный пробел в поле Find, используя ^ V.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...