相关疑难解决方法(0)

错误 - 无效使用不完整的类型/转发声明

我的问题很常见,但我一直在寻找和尝试我找到的所有解决方案,但仍然无效.所以任何帮助将不胜感激!=)

提前致谢!

我在编译时遇到此错误:

g++ -ISFML/include -Iclasses/ -W -Wall -Werror   -c -o classes/Object.o classes/Object.cpp
In file included from classes/Core.hh:18:0,
         from classes/Object.hh:4,
         from classes/Object.cpp:1:
classes/MapLink.hh:9:1: error: invalid use of incomplete type ‘struct Object’
classes/MapLink.hh:6:7: error: forward declaration of ‘struct Object’
In file included from classes/Core.hh:19:0,
         from classes/Object.hh:4,
         from classes/Object.cpp:1:
classes/Player.hh:9:1: error: invalid use of incomplete type ‘struct Object’
classes/MapLink.hh:6:7: error: forward declaration of ‘struct Object’
make: *** [classes/Object.o] Error 1
Run Code Online (Sandbox Code Playgroud)

所以基本上,我有一个主要包含(main.cpp)

#include "Core.hh"

int        main(void)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

这是包含我所有包含的头文件(Core.hh)

#ifndef __CORE_HH__
# …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance compiler-errors g++

19
推荐指数
1
解决办法
8万
查看次数

编译器错误C2653:不是类或命名空间名称

所以我最近在使用Visual C++ 2012时遇到了这个非常令人沮丧的问题.直到几个小时前,我编写的代码很好,一切都按预期工作,直到我决定优化一些东西并删除一些类.我修复了由此引发的所有错误,例如false包括等等.不幸的是,在此之后VS编译器发疯了.它开始给我错误,如:

Error 14 error C2653: 'Class' : is not a class or namespace name
Run Code Online (Sandbox Code Playgroud)

甚至

Error 5 error C2143: syntax error : missing ';' before '}'
Error 4 error C2059: syntax error : '>'
Run Code Online (Sandbox Code Playgroud)

我已经多次检查了,一切都在它的正确位置:包括所有标题,所有符号放在它们应该的位置.

据我所知,问题不在于我的代码,而在于编译器本身......我想,Visual Studio有时会非常烦人.无论如何,如果有人能帮我解决这个问题,我真的很感激.

(顺便说一句,禁用预编译头也没有工作)

代码的相关部分:

错误14:

#include "PlayerEntity.h"
PlayerEntity::PlayerEntity(void) {} // This line causes the error
Run Code Online (Sandbox Code Playgroud)

错误5:

class GameScreen : public BaseScreen
{
public:
    ...
private:
    ...
}; // This line causes the error
Run Code Online (Sandbox Code Playgroud)

错误4:

private:
     std::vector<BaseEntity*> _EntityList; // This line causes …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2012

19
推荐指数
1
解决办法
5万
查看次数

在C++中#define的适当使用场景是什么?

我知道基本的规则,使用inline,enumconst不是#define,这不是我追求这个问题.我想知道的是#define在C++中使用宏以及如何使用宏的可接受场景.

请不要发布问题或链接到"define vs const"问题或"预处理器与编译器",我已经通过了Scott Meyers的Effective C++,我知道一个优于另一个的优点.

然而,经过几个小时的网上冲浪,我觉得#define被认为是C++中的某种弱者,但我确信必须有一个案例,使用它可以接受甚至是可取的.

为了推动这个问题,我猜想我可以想到的一个场景是创建一个DEBUG基于它的宏,它可以打印所有代码以及用于调试目的的所有内容.

c++ macros c-preprocessor

18
推荐指数
5
解决办法
1056
查看次数

typedef的标准

gcc 4.4.4 c89

我只是想知道在创建类型时是否应该遵循任何标准.

例如:

typedef struct date
{
} date_t;
Run Code Online (Sandbox Code Playgroud)

我也看到人们把这样的资本投入:

typedef struct date
{
} Date;
Run Code Online (Sandbox Code Playgroud)

或者变量

typedef unsigned int Age;
Run Code Online (Sandbox Code Playgroud)

或这个

typedef unsigned int age_t;
Run Code Online (Sandbox Code Playgroud)

是否有任何应遵循的标准.我个人更喜欢用_t进行后固定.

非常感谢任何建议,

c typedef

17
推荐指数
4
解决办法
1万
查看次数

跨平台ALIGN(x)宏?

我想创建一个struct具有一定对齐的.

我想对GCC和VisualC++编译器使用相同的结构定义.

在VisualC++中,通常会这样做:

__declspec(align(32))
struct MyStruct
{
// ...
};
Run Code Online (Sandbox Code Playgroud)

在GCC中,通常会这样做:

struct MyStruct
{
// ...
} __attribute__ ((aligned (32)));
Run Code Online (Sandbox Code Playgroud)

我当然可以创建适当的宏来使其工作:

BEGIN_ALIGNED_STRUCT(32)
struct
{
// ...
}
END_ALIGNED_STRUCT(32)
;
Run Code Online (Sandbox Code Playgroud)

因此能够透明地处理这两种情况,但在这里我必须复制对齐常量(32),我想避免.

在GCC另一种方法是把__attribute__结构体标签后,作为中提到的文档,就像这样:

struct __attribute__ ((aligned (32))) MyStruct
{
// ...
};
Run Code Online (Sandbox Code Playgroud)

因此我可以使这种类型的语法工作:

ALIGNED_STRUCT(32) MyStruct
{
// ...
};
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的版本?其他想法?我尝试了一些代码搜索,但没有找到任何有希望的东西.


更新:基于@John的评论,这是另一个可以工作的版本(我没有编译它,但文档表明这是一个好主意)

struct MyStruct_Unaligned
{
// ...
};

TYPEDEF_ALIGNED(32, MyStruct_Unaligned, MyStruct);

// Would expand to one of:
// 
// typedef __declspec(align(32)) MyStruct_Unaligned MyStruct;
// …
Run Code Online (Sandbox Code Playgroud)

g++ memory-alignment visual-c++

17
推荐指数
2
解决办法
1万
查看次数

在编译时获取源文件的基本名称

我正在使用GCC; __FILE__返回当前源文件的完整路径和名称:/path/to/file.cpp.有没有办法file.cpp在编译时获取文件的名称(没有它的路径)?是否可以以便携方式执行此操作?模板元编程可以应用于字符串吗?

我在错误记录宏中使用它.我真的不希望我的源代码完整路径进入可执行文件.

c c++ compiler-construction macros makefile

15
推荐指数
4
解决办法
7939
查看次数

从std :: heap的中间删除一个元素

我正在使用优先级队列作为具有一个额外要求的调度程序.我需要能够取消预定的项目.这相当于从优先级队列的中间删除项目.

我无法使用std::priority_queue除了top之外的任何元素的访问受到保护.

我正在尝试使用algorithm堆函数.但我仍然错过了我需要的那件作品.当我从堆中间删除一个元素时,我希望它能够有效地重建它自己.C++提供了这些堆函数:

  • std::make_heap O(3N)
  • std::push_heap O(LG(n))的
  • std::pop_heap O(2 lg(n))

我想要一个像std::repair_heap大O < 3n这样的新功能.我将它提供了取消项目所在的洞的位置,它将适当地调整堆.

不提供std::repair_heap功能似乎是一个巨大的疏忽.我错过了一些明显的东西吗

是否有提供符合stl标准的库std::repair_heap

是否有更好的数据结构来建模调度程序?

注意:由于某些原因,
我没有使用std::map.

  • 堆具有恒定的内存开销.
  • 堆具有令人敬畏的缓存局部性.

c++ stl priority-queue data-structures

14
推荐指数
2
解决办法
6355
查看次数

关于@synthesize的问题

当您从Xcode创建一个嵌入CoreData的新应用程序时,您可以在委托的实现文件中获得这些行:

@synthesize window=_window;

@synthesize managedObjectContext=__managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

仅使用下划线或双倍之间有什么区别?只写作有什么区别:

@synthesize window;
Run Code Online (Sandbox Code Playgroud)

xcode objective-c

14
推荐指数
1
解决办法
4551
查看次数

这个 - >引用一切

我最近花了很多时间使用javascript,现在又回到了C++.当我从一个方法访问一个类成员时,我倾向于为它添加前缀this->.

class Foo {

  int _bar;

public:  
  /* ... */

  void setBar(int bar) {
    this->_bar = bar;
    // as opposed to
    _bar = bar;
  }
}
Run Code Online (Sandbox Code Playgroud)

在阅读时,它在试图找出它来自何处时为我节省了大脑周期.
我有什么理由不这样做吗?

c++

14
推荐指数
3
解决办法
812
查看次数

_(单个下划线)是一个有效的C++变量名吗?

使用gcc 4.7.2这对我来说很好:

int main()
{
  int _ = 1;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以期待这个编译吗?我已经阅读了关于下划线作为前缀答案.但是,如果下划线不是前缀任何东西呢?

c++ standards variable-names

14
推荐指数
3
解决办法
3770
查看次数