未定义的函数引用()

时间:2018-02-13 12:04:06

标签: c++

因此,海湾合作委员会一直在大肆宣扬这一令人难以置信的错误

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),但错误代码相同

2 个答案:

答案 0 :(得分:4)

using namespace GPS;仅允许您使用该命名空间中的名称,就好像它们是在当前范围内声明的一样。但是这种用法并没有扩展到定义它们。所以函数定义必须是

bool GPS::isValidSentence(const string &n)

如果这对您没有吸引力,您也可以将cpp文件中定义的内容包装在namespace GPS { }中。

答案 1 :(得分:0)

在源文件中,当您执行

using namespace GPS;

将符号从GPS命名空间拉到当前(全局)命名空间。但它实际上并没有“使用”命名空间。定义isValidSentence函数时,它在全局命名空间中定义,而不是在GPS命名空间中定义。