c++ - error C3646: unknown override specifier

Viewed 16818

I modified my project and after compiling there pop up some weird error.

#ifndef BART_RAY_TRACER_MESH_H
#define BART_RAY_TRACER_MESH_H

#include <vector>
#include "assert.h"
#include "vec3f.h"

class Triangle;

class Mesh {
public:
    uint32_t nverts;
    bool _is_static;
    vec3f *verts;
    vec3f *_verts_world;
    Material material; 
    // 2 error occurs at the line below
    Matrix4x4 _trans_local_to_world; // '_trans_local_to_world': unknown override specifier & missing type specifier - int assumed. Note: C++ does not support default-int
    Matrix4x4 _trans_local_to_world_inv;
    TransformHierarchy *_trans_hierarchy;   

    std::vector<Triangle* > triangles;
    // ...
};
#endif

When I change the order of the declaration a little bit, the error always occurs the line after Material material, but with different message:

#ifndef BART_RAY_TRACER_MESH_H
#define BART_RAY_TRACER_MESH_H

#include <vector>
#include "assert.h"
#include "vec3f.h"

class Triangle;

class Mesh {
public:
    uint32_t nverts;
    bool _is_static;
    vec3f *verts;
    vec3f *_verts_world;
    Material material; 
    // 2 error occurs at the line below
    TransformHierarchy *_trans_hierarchy; // error C2143: syntax error: missing ';' before '*' & error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    Matrix4x4 _trans_local_to_world;
    Matrix4x4 _trans_local_to_world_inv;  

    std::vector<Triangle* > triangles;
    // ...
};
#endif

I've searched for similar questions on SO but none seems useful. I've checked my vec3f, Triangle class definition in case there are missing semicolons but I can't find any.

Can any one help?

3 Answers

This is just another Microsoft cock-up. Here it is in essence:

class C
  {
  x y ;
  } ;

If you submit this to a sensible compiler like g++, it gives you a helpful error message:

3:2: error: 'x' does not name a type

MSVC, on the other hand, comes up with this gibberish:

(3): error C3646: 'y': unknown override specifier
(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

With this key, you can decrypt Microsoft's error message into:

error: 'Matrix4x4' does not name a type

In my case, it was found that a header file had the following directives for a class [ie, myComboBoxData]

#ifndef __COMBOBOXDATA__
#define __COMBOBOXDATA__
// ... 
class myComboBoxData
{
    // ...
}
#endif

As another class below tried to use myComboBoxData class

class TypeDlg : public CDialog
{
    myComboBoxData cbRow,cbCol;
    // ...
}

the error message popped up as above:

"error C3646: 'cbRow': unknown override specifier".

Solution:

The problem was the directive name (__COMBOBOXDATA__) was already used by OTHER header.

Thus, make sure to use some other name like (__myCOMBOBOXDATA__).

Related