我写了这个简单的代码:
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)。
答案 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
中调用它。