因此,海湾合作委员会一直在大肆宣扬这一令人难以置信的错误
undefined reference to 'GPS::isValidSentence(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
我的头文件parseNMEA.h
如下:
#ifndef PARSENMEA_H_211217
#define PARSENMEA_H_211217
#include <string>
#include <list>
#include <vector>
#include <utility>
#include "position.h"
namespace GPS
{
using std::string;
using std::vector;
using std::pair;
bool isValidSentence(const string &);
}
#endif
我的源文件parseNMEA.cpp
是:
#include "parseNMEA.h"
using namespace GPS;
bool isValidSentence(const string &n)
{
string test = n;
bool result;
if (test.find("$GP") != string::npos) //Find the prefix
{
if (test.size() > 5) //Check if it has 3 char identifier
{
//check if it has ',' after identifier
if (test[6] == ',')
{
//check for a '*'
if(test.find("*",7))
{
result = true;
}
}
}
}
else
result = false;
return result;
}
关于最新情况的任何想法?我在头文件中尝试过bool isValidSentence (const string &n)
,但错误代码相同
答案 0 :(得分:4)
using namespace GPS;
仅允许您使用该命名空间中的名称,就好像它们是在当前范围内声明的一样。但是这种用法并没有扩展到定义它们。所以函数定义必须是
bool GPS::isValidSentence(const string &n)
如果这对您没有吸引力,您也可以将cpp
文件中定义的内容包装在namespace GPS { }
中。
答案 1 :(得分:0)
在源文件中,当您执行
时using namespace GPS;
将符号从GPS
命名空间拉到当前(全局)命名空间。但它实际上并没有“使用”命名空间。定义isValidSentence
函数时,它在全局命名空间中定义,而不是在GPS
命名空间中定义。