小编Mat*_*lia的帖子

OpenGL SuperBible第5版设置问题

好了,我最近得到了OpenGL的OpenGL超级,并设置上的目录编号:: Blocks的freeglutGLTools.h,但这些#include声明将无法正常工作:

#include <GLtools.h>
#include <GLShaderManager.h>
#include <iostream>
#include <GL/glut.h>
Run Code Online (Sandbox Code Playgroud)

要设置目录,我通过"设置" - >"编译器和调试器..." - >"搜索目录"选项卡,并在"编译器"选项卡下添加它(还有"链接器"和"资源编译器"选项卡):

C:\CodeBlocks\SB5\Src\GLTools\include
Run Code Online (Sandbox Code Playgroud)

C:\CodeBlocks\SB5\freeglut-2.6.0\include
Run Code Online (Sandbox Code Playgroud)

这些是我得到的错误:

C:\CodeBlocks\SB5\freeglut-2.6.0\include\GL\freeglut_std.h|60|warning: "NOMINMAX" redefined|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\mingw32\bits\os_defines.h|46|warning: this is the location of the previous definition|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|225|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|226|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|227|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|228|error: expected constructor, destructor, or type conversion before 'void'|
c:\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\..\include\GL\glu.h|229|error: 'GLAPI' does not name …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction opengl

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

std :: list <>:l.begin()之前的元素

简短的问题:以下代码使用其他编译器是不安全的(mingw32),还是有效使用?

list<int> l;
/* add elements */
list<int>::iterator i = l.begin();
i--;
i++;
cout << *i << endl;
Run Code Online (Sandbox Code Playgroud)

...或换句话说:被i定义为指向l.begin()此之后?

c++ list

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

绘制像素到屏幕,跨平台

简而言之:我想要的只是以最基本的方式在屏幕上显示像素数据,而不会失去跨平台兼容性.

我之前曾经问过类似的问题,但他们似乎并没有朝着我正在寻找的方向前进.

基本上,我正在创建自己的小游戏库,我打算将它用于我自己的2D像素艺术游戏.所有像素处理由我自己处理,现在我一直在寻找一个绝对最小的解决方案来启动一个窗口,听它的事件(鼠标,键盘,窗口事件)和绘制我的像素.如果库可以处理线程和/或音频,则会获得奖励.

在这个阶段我不需要任何OpenGL支持,我不确定我会不会.除了提到的那些之外,我真的不需要任何功能.我应该自己开始使用Windows,X11和OSX API,还是在那里有一个真正的极简主义框架?是否让我自己的平台独立的极简主义框架真的很辛苦?如果不是那么大的交易,我可能只是出于纯粹的好奇心来调查这个解决方案.

如果你有任何关于我自己与发现有用的东西的见解,我会全力以赴.

谢谢!

编辑:简而言之......

c user-interface cross-platform

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

从单个char到指针的映射的Plain C实现

我有高级语言的编程经验,并且几周前开始使用普通C编码(出于学术原因).我想实现类似于的数据结构map<char,myStruct*>.

如果这还不够清楚:我希望将每个可能的SINGLE"映射" char到指向我在其他地方定义的结构的指针上.如果有一种方法可以确保没有2 char秒可以指向相同的struct(char在将新元素插入地图时不检查其他内容)那将是整洁的,但这不是绝对必要的.我还需要能够从地图中删除配对,并重新插入具有相同键但不同指针的配对.

我已经想到了这一点,并认为我可以创建一个指针数组所有可能的字符长度,并只使用char作为数组索引存储相应的指针(因为它只是一个数字常量).这可能非常有用,但如果我最终在我的应用程序中只使用几个字符,那么为地址分配那么多空间似乎效率低下.

尽管如此,我还是没有想到任何替代解决方案(考虑到我是C新手,不是那么令人惊讶).我会很感激任何,甚至模糊的建议,朝着正确的方向前进.

c implementation map

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

指针和malloc问题

我对C很新,当他们引用字符串时我会遇到数组和指针.我可以要求输入2个数字(整数),然后返回我想要的那个(第一个数字或第二个数字),没有任何问题.但是,当我请求名称并尝试返回它们时,程序在输入第一个名称后崩溃并且不确定原因.

从理论上讲,我希望为名字保留内存,然后将其扩展为包含第二个名称.任何人都能解释为什么这会破裂

谢谢!

#include <stdio.h>
#include <stdlib.h>



void main ()
{
    int NumItems = 0;

    NumItems += 1;
    char* NameList = malloc(sizeof(char[10])*NumItems);
    printf("Please enter name #1: \n");
    scanf("%9s", NameList[0]);
    fpurge(stdin);

    NumItems += 1;
    NameList = realloc(NameList,sizeof(char[10])*NumItems);
    printf("Please enter name #2: \n");
    scanf("%9s", NameList[1]);
    fpurge(stdin);

    printf("The first name is: %s",NameList[0]);
    printf("The second name is: %s",NameList[1]);

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

c arrays malloc pointers

3
推荐指数
1
解决办法
1213
查看次数

为什么static_cast可以编译将指针转换为智能指针

我只是偶然发现了一个来自智能指针的演员,想要检查是否static_cast可以在编译时声明以下是无意义的:

int main()
{
    char foobar[4] = "Foo";
    std::unique_ptr<char[]> myptr = static_cast<decltype(myptr)>(foobar);
    myptr.reset();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里发生的是myptr尝试释放foobar.

我不是在问什么是智能指针或如何分配或以其他方式修复上述内容.

我认为这个问题应该在编译时捕获,因为这些类型应该是完全不兼容的.

为什么在编译时没有检测到这个?

c++ static-cast unique-ptr

3
推荐指数
1
解决办法
614
查看次数

C++ vtable查询

我对此处提供的解释有疑问http://www.parashift.com/c++-faq/virtual-functions.html#faq-20.4

在示例代码中的函数mycode(Base *p),调用virt3方法为p->virt3().在这里,编译器如何知道virt3是在第三个插槽中找到的vtable?它如何与之比较?

c++

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

应尽可能避免循环范围?

在我的DirectX程序中,我编写了一个循环,它遍历std :: string然后我运行了性能分析器,并意识到这个循环消耗了极大的CPU时间.当我运行我的程序时,我有大约1300 FPS.所以我决定用这个做点什么,我把基于范围的循环改为典型的迭代.我的意思是我改变了:

for( char c : std_string_name )
Run Code Online (Sandbox Code Playgroud)

for(size_t i=0; i<std_string_name.size(); ++i )
{ char c = std_string_name[i]; }
Run Code Online (Sandbox Code Playgroud)

现在我有大约1900 FPS.这不奇怪吗?

接下来我决定测试迭代器本身,没有任何循环体.下面我用我的测试结果链接到屏幕截图.
str是一个长字符串,aa,bb,cc是时钟的倍数.

void main(){

    for(int i=0;i<10;++i)
        str += str;

    clock_t a, b, c;
    clock_t aa, bb, cc;

    a=clock();
    iter1(str);
    aa = clock() -a ;

    b=clock();
    iter2(str);
    bb=clock()-b;

    c=clock();
    iter3(str);
    cc=clock()-c;

}

void iter1( std::string str ){
    for( char c : str ){
    }
}

void iter2( std::string str ){
    for( char &c : str ){
    } …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

区别!和〜

我正在实现一个简单的状态机如下:

typedef void V_V_StateFunc(void);
static V_V_StateFunc *const fpCurrentStateFunc[STATE_ELEM_SIZE]={

    &fn1,/*0*/

};

void Execute_StateMachine(const U8 bCurrent_StateIndex)
{
    if(bStateIndex == (~bInvert_StateIndex))
    {
        if(bCurrent_StateIndex <= STATE_ELEM_SIZE)
        {
            fpCurrentStateFunc[bCurrent_StateIndex]();
        }
        else
        {
            /*this should never enter*/
        }   
    }
    else
    {
            /*this should never enter*/
    }
}

void Update_State(U8 bNewIndex)
{
    bStateIndex=bNewIndex; //bStateIndex & bInvert_StateIndex are globals
    bInvert_StateIndex=(~bNewIndex);
}
Run Code Online (Sandbox Code Playgroud)

在功能方面Execute_StateMachine(),如果我检查bStateIndex == (~bInvert_StateIndex),值始终为0,进入讷韦尔的if语句,虽然bStateIndex=0~bInvert_StateIndex=0(即0 == 0,这是真的).为什么会这样?

如果我改变了bStateIndex == (!bInvert_StateIndex),它就会进入if声明.

~!这里有什么区别?

c logical-operators

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

为什么禁用窗口会释放鼠标捕获,但禁用其父窗口不会释放鼠标捕获?

我有一个带有主窗口和子窗口的 Win32 应用程序;在某些情况下,子窗口使用SetCapture.

在这些情况下,如果我使用禁用子窗口,EnableWindow(hChild, FALSE)我会立即停止接收鼠标事件。但是,如果我使用 禁用其父EnableWindow(hMainWindow, FALSE)窗口,则只要捕获鼠标,子窗口就会继续接收事件。一旦它被释放,子窗口就会定期停止接收事件,直到主窗口再次启用。

为什么会有这种差异?当他们的父母被禁用时,子窗口不是也被禁用吗?

(受到我们今天在工作中遇到的一个实际问题的启发,因为没有太多关于SetCapture& co 的讨论。我希望这会对将来的人有所帮助)

c windows mouse winapi event-handling

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