错误:在'long'之前预期的primary-expression和无效的转换

时间:2011-11-26 02:45:07

标签: c++ algorithm oop compiler-errors

我知道有很多人遇到这个错误。我确实做了搜索工作,但似乎这个错误消息出现在所有不同的情况下。你能告诉我什么是错的吗?基本上这个类存储一个长输入的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 个答案:

答案 0 :(得分:5)

错误在于:

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释放它。