C++ 警告:治疗';c-收割台';输入为';c++-标题';在C++;模式下,此行为已被弃用

C++ 警告:治疗';c-收割台';输入为';c++-标题';在C++;模式下,此行为已被弃用,c++,clang,C++,Clang,这个叮当作响的错误消息是什么意思,为什么我会收到它?我似乎在网上找不到关于它的任何信息… 警告:将C++标题作为“C++头”处理时,在C++模式下,此行为被禁止< /代码> < /P> 这是我的密码 合并排序.h: #ifndef __MERGESORT_H__ #define __MERGESORT_H__ #include <iostream> using namespace std; class MergeSort; class MergeSort { publi

这个叮当作响的错误消息是什么意思,为什么我会收到它?我似乎在网上找不到关于它的任何信息…
警告:将C++标题作为“C++头”处理时,在C++模式下,此行为被禁止< /代码> < /P> 这是我的密码

合并排序.h

#ifndef __MERGESORT_H__
#define __MERGESORT_H__

#include <iostream>
using namespace std;

class MergeSort;

class MergeSort
{
    public:

    MergeSort();
    MergeSort(const int* list, int length);
    ~MergeSort();

    friend ostream& operator<< (ostream& os, const MergeSort& ms);

    private:

    int* list;
    int len;
};

ostream& operator<< (ostream& os, const MergeSort& ms);
#endif
#include <iostream>
#include "MergeSort.h"

using namespace std;

MergeSort::MergeSort()
{
    list = new int[1];
    list[0] = 0;
    len = 0;
}

MergeSort::MergeSort (const int* t, int length)
{
    if (t) {
        len = length;
        list = new int[len];
        for (int i = 0; i < length; i++)
            list[i] = t[i];
    }
    else {
        list = new int[1];
        list[0] = 0;
        len = 0;
    }
}

MergeSort::~MergeSort()
{
    delete[] list;
}

ostream& operator<<(ostream& os, const MergeSort& ms)
{
    for (int i = 0; i < ms.len; i++)
        os << ms.list[i];
    return os;
}


int
main()
{
    int list[] = {1,2,3,4};
    int list_len = sizeof(list)/sizeof(int);
    MergeSort ms = MergeSort(list, list_len);
    cout << ms << endl;
    cout << "hello world" << endl;
}

您不应该编译头文件,而应该编译源文件。

Inspire from@JoachimPileborg。此错误消息的实际含义是:

您正在通过
CXX
编译器编译
C
头文件。它
并不
意味着您
不能
编译头文件。如果为正确的文件选择了正确的编译器,则可以编译头文件。简言之:

clang   with *.h    works
clang   with *.hpp  not works
clang++ with *.h    not works
clang++ with *.hpp  works

因此,要解决编译头文件的问题,例如预编译头文件,只需将后缀从
.h
更改为
.hpp
就可以了。

因此命令行应该是:
clang++-c-g-Wall MergeSort.cpp
(不要直接提及
MergeSort.h
)。叹气。。。谢谢,错误消息现在更有意义了。那么预编译头呢?在尝试构建依赖项时也会发生这种情况:
make depend
@jayatubi预编译头完全不同,根据编译器的不同,其工作方式也不同。
clang   with *.h    works
clang   with *.hpp  not works
clang++ with *.h    not works
clang++ with *.hpp  works