在令牌之前的预期初始化程序'

时间:2015-11-14 12:53:58

标签: c++

我知道有关此错误消息的几个问题,但我没有为我的案例找到合适的解决方案。我想从库中导出Filter类。 Visual Studio 2013只是编译得很好,但是gcc会抛出错误:

prog.cpp:16:17: error: expected initializer before 'Filter'
 class DllExport Filter{
                 ^
prog.cpp:22:6: error: 'Filter' has not been declared
 void Filter::setFilter(const std::vector<float>& vFilter, unsigned int uNumThreads) {
      ^

代码:

#ifndef _GNULINUX
#define DllExport __declspec(dllexport)
#else
#define DllExport __attribute__((visibility("default")))
#endif

#include <string>
#include <vector>
#include <iostream>

#ifdef __cplusplus
extern "C" {
    namespace FilterAPI {
#endif

class DllExport Filter{
public:
    static void setFilter(const std::vector<float>& vFilter, unsigned int uNumThreads);

};

void Filter::setFilter(const std::vector<float>& vFilter, unsigned int uNumThreads) {
}

#ifdef __cplusplus
}  //  namespace FilterAPI
}  //  extern "C" {
#endif

另见 https://ideone.com/3VV4AH

编辑:

make文件中的

标志是:

# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.8

# compile CXX with /usr/bin/c++
CXX_FLAGS = -fPIC  

CXX_DEFINES = -DFilter_Library_EXPORTS

2 个答案:

答案 0 :(得分:1)

我认为你的问题在错误定义, 应为#ifndef __linux,您可以找到gcc默认值 与gcc -dM -E - < /dev/null

答案 1 :(得分:0)

我认为您不需要明确声明可见性为&#34;默认&#34;。它在Windows上很重要,是的,但在Linux / POSIX上,默认是你想要的。

#ifdef _WIN32
  #define DllExport __declspec(dllexport)
#else
  #define DllExport
#endif

这是更常见的习语,至少。