类型说明符是missng,int假定为c ++

时间:2015-09-07 02:34:43

标签: c++

有一些简单的C ++控制台应用,我已经Utility.h看起来像这样

#pragma once

#include "stdafx.h"

using namespace std;

class Utility
{

public:
    Utility();
    ~Utility();

    static Plane* getPlanes(const char* fileName);
    static arma::vec getDirectionVector(int phi, int theta);
};

我已经Utility.cpp看起来像

    #include "stdafx.h"
    #include "Utility.h"


    Utility::Utility()
    {
    } 

    Plane* Utility::getPlanes(const char* fileName)
    {
        const char *p_chInputFileName = fileName;
        ifstream *p_inFileStream;
        Plane *p_confiningPlanes;
        ..........................................
        .........................................
        return p_confiningPlanes;
    }

    arma::vec getDirectionVector(int phi, int theta)
    {
        arma::vec direcitonVector(3);
        direcitonVector.at(0) = cos(theta) * cos(phi);
        direcitonVector.at(1) = cos(theta) * sin(phi);
        direcitonVector.at(3) = sin(theta);

        return direcitonVector;
    }


Utility::~Utility()
{
}

我的项目中还有一些其他文件,我认为这些文件很重要。 我的编译器一直告诉我; is missing before *type specifier is missng and int is assumed在行

static Plane* getPlanes(const char* fileName);

我不知道发生了什么事情,在我删除并再次向我的项目中添加了一些类以及可能的其他内容之后出现了这个问题。

3 个答案:

答案 0 :(得分:1)

我猜它没有意识到01403003 2015-09-01 07:54 11:00 11:42 17:02 17:03 是一个类,而是认为你试图声明一个名为Plane的静态成员(并警告你它假设它是类型的Plane,因为你没有给它一个类型。)

int struct Plane;之前添加class Utility {转发声明Utility.h,这应该让它明白Plane是一种类型,而不是名称您试图申报的成员,从而解决您的问题。

(我还应该注意到很多人在头文件的顶层Plane皱眉。)

答案 1 :(得分:1)

#include<iostream> #include<algorithm> #include <vector> using namespace std; int main() { int n,R,L; long long idx,aver; vector<long long>v; vector<long long>::iterator it; while(cin>>n) { v.push_back(n); it=v.begin(); sort(v.begin(),v.end()); if(v.size()==1){ cout<<*it<<endl; } else if(v.size()%2==0) { L=v.size()/2-1; R=v.size()/2; aver=(*(it+L)+*(it+R))/2; cout<<aver<<endl; } else { idx=v.size()/2; aver=*(it+idx); cout<<aver<<endl; } } return 0; } 你有

utility.h

但是头文件中没有任何内容可以告诉编译器static Plane* getPlanes(const char* fileName); 是什么。您需要包含其中包含Plane类型的文件,或者在头文件中将其声明为声明。

答案 2 :(得分:0)

您需要告诉编译器Plane

执行此操作的最基本方法是在Plane中包含定义Utility.h的标头。

更高级的方法是通过在class Plane;之前将struct Plane;Utility.h酌情添加到class Utility来转发声明类或结构,然后包括在Plane中定义Utility.cpp的标头。你可以这样做,因为在标题中你只有一个指向Plane的指针,因此编译器只需要知道它的存在。在使用它时,您需要包含类/结构的定义。