标头中的方法实现不可见

时间:2014-06-15 00:57:07

标签: c++ header-files

我有一个noob问题,非常感谢回答为什么我在头文件中定义的方法对调用类不可见。我在网上进行了研究,他们都说它应该像现在一样运作。

的main.cpp

#include "sort.h"
#include <stdio.h>
#include <vector>

int main(int argc, char* argv[]){

std::vector<int> insertionVector = sort::insertionSort(data, sizeof(data) / sizeof(int));

sort.h

#include<vector>
namespace sort{
int* bubbleSort(const int *data, int size);
std::vector<int> insertionSort(const int *data, int size);

void swapValues(int* bigger, int* smaller){
    *bigger += *smaller;
    *smaller = *bigger - *smaller;
    *bigger = *bigger - *smaller;
}

}

InsertionSort.cpp

#include<vector>
namespace sort{

std::vector<int> insertionSort(const int *data, int size){
    std::vector<int> values(data,data+size);

    for (int i = 1; i < values.size(); ++i){
        int j = i;
        while (j>0 && values.at(j - 1) > values.at(i)){
            swapValues(&values.at(j-1),&values.at(j));
            j--;
        }
    }
    return values;
}
}

我已尝试在sort.h中内联swapValues方法,但它没有任何区别,swapValues的InsertionSort.cpp中的调用表示&#34;错误C3861:&#39; swapValues&#39;:未找到标识符。当它位于名称空间并包含名称空间时,为什么看不到该方法呢? 感谢您抽出时间帮助我!

2 个答案:

答案 0 :(得分:1)

InsertionSort.cpp需要包含sort.h才能获得swapValues的声明。

答案 1 :(得分:0)

您需要在InsertionSort.cpp中包含sort.h

#include "sort.h"
using namespace sort;