Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ GCC函数多版本控制和名称空间_C++_Gcc - Fatal编程技术网

C++ GCC函数多版本控制和名称空间

C++ GCC函数多版本控制和名称空间,c++,gcc,C++,Gcc,考虑以下使用GCC函数多版本控制的代码段 //ver.h #include<string> namespace nt { __attribute__ ((target ("default"))) std::string version(); __attribute__ ((target ("sse2"))) std::string version(); __attribute__ ((target ("ssse3"))) std::string version(); __a

考虑以下使用GCC函数多版本控制的代码段

//ver.h
#include<string>
namespace nt {
__attribute__ ((target ("default"))) std::string version();
__attribute__ ((target ("sse2")))    std::string version();
__attribute__ ((target ("ssse3")))   std::string version();
__attribute__ ((target ("sse4")))    std::string version();
}

//ver.cpp   
#include "ver.h"
using namespace nt;    
__attribute__ ((target ("default"))) std::string nt::version() { return "default"; } 
__attribute__ ((target ("sse2")))    std::string nt::version() { return "sse2";    } 
__attribute__ ((target ("ssse3")))   std::string nt::version() { return "ssse3";   } 
__attribute__ ((target ("sse4")))    std::string nt::version() { return "sse4";    }

我使用的是GCC4.8.2。非常感谢您的帮助。

您还需要在nt命名空间中定义函数

//ver.cpp   
#include "ver.h"
namespace nt {
  __attribute__ ((target ("default"))) std::string version() { return "default"; } 
  __attribute__ ((target ("sse2")))    std::string version() { return "sse2";    } 
  __attribute__ ((target ("ssse3")))   std::string version() { return "ssse3";   } 
  __attribute__ ((target ("sse4")))    std::string version() { return "sse4";    }
}

他们是。在OPs问题中,函数的前缀是
nt::
。这还不够吗?也许应该,我不太明白为什么gcc不能解析这个表单——但它不是。。
//ver.cpp   
#include "ver.h"
namespace nt {
  __attribute__ ((target ("default"))) std::string version() { return "default"; } 
  __attribute__ ((target ("sse2")))    std::string version() { return "sse2";    } 
  __attribute__ ((target ("ssse3")))   std::string version() { return "ssse3";   } 
  __attribute__ ((target ("sse4")))    std::string version() { return "sse4";    }
}