对构造函数的困惑 - 期望';'

时间:2014-03-10 21:33:41

标签: c++ class

我没有将我的类放在与main函数相同的文件中,而是尝试使用#include。但是,当我这样做时,我的构造函数出错了。这是我的input.cpp文件:

#ifndef input
#define input
using namespace std;
#include <string>
#include <iostream>

class input
{
public:
    input(int sent)
    {
        s = sent;
    }

    void read();
    void store(string s);

private:

    int s;

};
#endif

这是我的主要功能:

#include <iostream>
#include <string>
using namespace std;
#include "input.cpp"



int main()
{

    cout<<"Hello, please enter your input"<<endl;
    string sent;
    getline(cin, sent);
    cout<<sent;

    input1 *newinput = new input1("hello");




    system("pause");

    return 0;
}

我得到的错误是

  

“intelliSense期待';'”

在我的构造函数的主体中。但是,当我将类直接复制/粘贴到main.cpp文件中时,错误消失了。有什么原因导致这个问题吗?

2 个答案:

答案 0 :(得分:2)

  1. 请勿在标题
  2. 中使用using namespace
  3. 您有input作为宏常量,类的名称是相同的。我担心这是你问题的根源。
  4. 更喜欢使用构造函数初始化列表input(int sent) : s(sent) {}
  5. UPDT

    你可能需要构造函数能够接受字符串作为参数input(const std::string& str1) : str(str1) {},其中str是类成员来处理字符串数据。

答案 1 :(得分:0)

您将构造函数定义为具有int

类型的一个参数
input(int sent)
{
    s = sent;
}

但尝试将其作为参数传递给字符串文字

input *newinput = new input("hello");

具有类型const char[6]的字符串文字不能隐式转换为int类型,并且该类没有其他构造函数接受字符数组作为参数。

EDIT:您已多次更改原始帖子,因此现在不清楚是否在州名中使用名称input1

input1 * newinput = new input1(“hello”);

是拼写错误或者是其他类型。

您还有一个与类名相同的宏定义

#ifndef input
#define input

更改宏名称或类名。