XXX :: XXX的原型与XXX类中的任何一个都不匹配

时间:2014-10-04 09:48:18

标签: c++

我写了这个简单的代码:

main.h

#ifndef MAIN_H
#define MAIN_H

#include <stdio.h>
#include <iostream>
#include <vector>
#include <stdlib.h>

class Parameters
{
    private:
        std::string _hostname, _channel, _syslogs;
        int _port;
        std::vector<std::string> _list;
    public:
        std::string getHost() {return _hostname;}
        std::string getChan() {return _channel;}
        std::string getSys()  {return _syslogs;}
        std::vector<std::string> getList() {return _list;}
        int getPort() {return _port;}
};

#endif // MAIN_H header guard

的main.cpp

#include "main.h"

using namespace std;

Parameters::Parameters (int argc, char** argv){
    if (argc<2 || argc>4){
        fprintf(stderr,"ERROR: Invalid count of parameters\n");
        exit(EXIT_FAILURE);
    }
}

int main(int argc, char**argv)
{
    Parameters parameters(argc,argv);
    return 0;
}

但它不会编译。 G ++错误:

g++ -Wall -fexceptions -g -Wextra -Wall  -c
/home/pathtoproject/main.cpp -o obj/Debug/main.o
/home/pathtoproject/main.cpp:13:1: error: prototype for
‘Parameters::Parameters(int, char**)’ does not match any in class
‘Parameters’

我正在使用G ++ 4.8(以及CB 13.12 IDE)。

2 个答案:

答案 0 :(得分:1)

您正在尝试提供未声明为类声明一部分的构造函数的实现。

您需要将此行添加到班级的public:部分:

Parameters (int argc, char** argv);

这是编译器抱怨的缺失原型。添加此原型将在您main.h定义main.cpp构造函数中声明

答案 1 :(得分:1)

您必须将构造函数的声明添加到Parameters

class Parameters
{
    private:
        // ...
    public:
        // ...
        Parameters(int argc, char** argv);
};

否则,编译器不知道构造函数存在于仅包含头的其他转换单元中。您的构造函数必须声明为public部分,以便可以在main中调用它。