获取错误:在'('标记之前)期望的构造函数,析构函数或类型转换

时间:2018-01-18 11:53:56

标签: c++ compiler-errors

我正在尝试创建函数库。我创建了四个文件:

Function.hpp, Function.cpp, FunctionsRepository.hpp, FunctionsRepository.cpp

我希望pointers保留vector指针中的函数。

// FunctionsRepository.hpp

#ifndef FUNCTIONSREPOSITORY_HPP
#define FUNCTIONSREPOSITORY_HPP

#include <vector>
using namespace std;

class FunctionsRepository {
    private:
        static vector<double *> pointerToFunctions;
    public:
        static void addFunction(double * wsk);

};

#endif

// FunctionRepository.cpp

#include "FunctionsRepository.hpp"
void FunctionsRepository::addFunction(double * wsk) {
    pointerToFunctions.push_back(wsk);
}

// Functions.hpp

#ifndef FUNCTIONS_HPP
#define FUNCTOINS_HPP

#include "FunctionsRepository.hpp"

int constFunction(int numberOfVehicles);
void linearFunction();
void stepFunction();

#endif

// Funcctions.cpp

#include "Functions.hpp"

double constFunction(double numberOfVehicles){
    return numberOfVehicles/2;
}

double (*funcConstant)(double) = constFunction;

//ERROR HERE
FunctionsRepository::addFunction(funcConstant);

我希望尽可能轻松地添加新功能,并在程序的其他部分使用它。

但我不明白。为什么我收到此错误。 addFunction()方法是静态的,这意味着我可以在其他类或程序的一部分中使用它。 Vector是static,以确保它是整个程序的唯一副本。

2 个答案:

答案 0 :(得分:0)

使用函数包装器。 std :: function可以存储可调用对象。因此,您的代码将包含以下内容:

class FunctionsRepository {
    private:
        // void() - function prototype
        static std::vector<std::function<void()>> pointerToFunctions;
    public:
        static void addFunction(std::function<void()> wsk)
        {
            pointerToFunctions.push_back(wsk);
        }
};

有关详细信息,请参阅官方文档:http://en.cppreference.com/w/cpp/utility/functional/function

答案 1 :(得分:0)

我解决了它。我收到一个错误,因为我在任何范围内调用FunctionsRepository::addFunction(funcConstant);表达式。我刚刚创建了新函数来执行这个命令,这就是全部。