ошибка: ожидаемое первичное выражение перед длинным и недопустимое преобразование - PullRequest
1 голос
/ 26 ноября 2011

Я знаю, что многие люди встречают эту ошибку. Я делал поисковую работу, но кажется, что эта ошибка появляется в разных ситуациях. Не могли бы вы сказать мне, что не так? В основном этот класс хранит массив int длинного ввода. ЭТА ошибка в функции num ()

и другая ошибка:

main.cpp:43: error: invalid conversion from ‘num*’ to ‘long int’
main.cpp:43: error:   initializing argument 1 of ‘num::num(long int)’

#include <iostream>
#include <fstream>
using namespace std;
//ifstream fin;
//ofstream fout;
class num 
{
     public:
     int dig[9];
      void breakDown(long input)
     {   
             for(int digPos=0;input>0;digPos++)
             {   
                     dig[digPos]=input-((int)input/10)*10;
                     input=(int)input/10;
             }   
     }   
     num(long in) // constructor
     {   
             breakDown(long in);
     }   
     int outPut()
     {   
             for(int digPos=0;digPos<9;digPos++)
             {   
                     cout << dig[digPos];
             }   
             return 0;
     }    
};

//int init()
//{
//      fin.open("runround.in",ifstream::in);
//      fout.open("runround.out");
//}


int main()
{
//        init();
     num num1=new num((long)81236);
}

1 Ответ

5 голосов
/ 26 ноября 2011

Ошибка здесь:

num(long in) // constructor
{   
    breakDown(long in);
}

измените это на:

num(long in) // constructor
{
    breakDown(in);
}

Вы не указываете типы при вызове функции.


Другая ошибка здесь:

num num1=new num((long)81236);

new num возвращает указатель. Но вы присваиваете его объекту num, что несовместимо.

У вас есть два варианта:

num num1((long)81236);

Это создаст объект num локально в стеке.

Другой вариант:

num *num1 = new num((long)81236);

Это позволит разместить объект num в куче. Но вам нужно освободить его позже с delete.

...