小编Eva*_*ake的帖子

C++创建"包装器"

在下面更新

我正在尝试创建此包装器以包含指向所有其他类的指针.我遇到了这个问题(例子):

main.cpp中

struct wrap {
  Game* game;
  Player* player;
  Map* map;
};
Run Code Online (Sandbox Code Playgroud)

game.h

class Game {
  private:
    wrap* info;
}
Run Code Online (Sandbox Code Playgroud)

有没有解决方法,包装需要游戏,游戏需要包装.(我知道包装类[此案例结构]不是最佳实践,但我在其他类中经常需要该信息.)

立即更新,我遇到了一个新问题.

items.h

// top
struct CoreInfo;


void Items::test() {
    struct CoreInfo* b;
    //b->testing = 4;
}
Run Code Online (Sandbox Code Playgroud)

(结构CoreInfo包含一个变量"int testing.",我无法弄清楚如何访问items类中的任何内容,正常错误:7请求'b'中的成员'testing',这是非类型的'CoreInfo'*"

c++ struct class

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

C++中的双指针引用

这可能是一个愚蠢的问题,但无论如何我都要问它:

假设您有一个指针:Object* pointer 指向动态分配的对象.

class PointClass
{
 Array<Object*> m_array1;
 Array<Object*> m_array2;

 void Delete1()
 {
     for (int i = 0; i < m_array1.Length; i++)
     {
         delete m_array1[i];
     }
 }

void Delete2()
{
    for (int i = 0; i < m_array2.Length; i++)
    {
        delete m_array2[i];
    }
 }
}
Run Code Online (Sandbox Code Playgroud)

现在,你把指针放在里面m_array1和里面m_array2.

当您尝试删除数组时,在其中一个数组中,您将有一个指向已释放空间的指针,因此您无法再次删除它!

我不能在删除后将指针指定为NULL,因为它不会影响另一个数组中的指针.

你会如何解决它?

c++ pointers

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

将 C 程序中的地址转换为源行

在我的 C 程序中,我使用backtrace获取函数调用堆栈,然后使用backtrace的输出通过backtrace_symbols获取函数名称。生成的字符串包含函数名称和调用启动代码的地址以及该函数。有没有办法将这些地址转换为文件名和行号?我的意思是使用 gcc 扩展的 C 库(仅适用于 Linux)。提前致谢!

c

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

C++ Win32如何创建"切换"按钮

我原本以为这会非常容易.谷歌搜索返回的结果除此之外的一切.

我正在尝试使用一个可以单击的普通按钮,它会保持向下,再次单击,然后再次上升.

我找到了一个功能,它做了我想要的,但只有按钮保持焦点,点击其他任何地方,然后它再次上升.

Button_SetState(GetDlgItem(hwnd, IDC_BTN_SLEEPCLICK), TRUE);

有没有真正的方法来做到这一点?或者我需要手工做这种事情?

谢谢.

c++ winapi button toggle

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

Win32 C++低级键盘挂钩导致奇怪的行为

我在尝试使用键盘钩时遇到问题.我想做的(并且确实)是从任何窗口/焦点,我可以点击一个运行一个功能的键(移动鼠标和点击.)

它从前面工作得很好,但是一旦我开始做其他事情,一切都很奇怪(即使在关闭问题之后.)

在Firefox上,它会有一个"选择并突出显示鼠标点击时所有位置"; 如果我尝试输入,所有数字字符都会出现,就好像换档按钮已关闭而无法绕过它.如果我点击任务栏上的编译器(wxDev C++),它会自动启动程序的新实例.

这只是问题的开始,我重新启动计算机以再次获得正常行为.

我想我可能错了:

在int WinMain中:

keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hThisInstance, 0);

在主程序中:

case WM_KEY_WPARAM_VK: 
keyid = wParam; // 65 == 'a'
letterid = keyid - 65;
if ('a'+letterid == 'q') {  DoFunction(); }
return 0;
Run Code Online (Sandbox Code Playgroud)

所以当我在键盘上按q时,会调用该函数.

这是程序,我试图不锁定键盘键入(所以我添加了额外的行.)我无法弄明白...

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam ) {
  KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
  // When a key is pressed
  if (WM_KEYDOWN == wParam) {
    PostMessage(hWnd, WM_KEY_WPARAM_VK, pKeyBoard->vkCode, 0);
    CallNextHookEx(keyboardHook, pKeyBoard->vkCode, 0, 0);
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢阅读.

c++ winapi keyboard-hook

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

C++ Win32 GetDC以及何时发布DC

在我的程序(游戏)中,我进行了GetDC()调用并将DC保存为全局.我想在程序结束时我只能发布ReleaseDC().

目前我遇到麻烦,因为有些事情没有正确.我使用具有各种功能的DC和计时器.

这可能导致这个问题吗?

(程序的大小太大,无法改变一切,看它是否会帮助......)

编辑:我唯一一个全球保存(并在窗口创建后设置)是

HDC hDC = GetDC(hWnd)
Run Code Online (Sandbox Code Playgroud)

然后,每当我需要做某事时:

HDC hdcMem = CreateCompatibleDC(hDC);
// everything
DeleteDC(hdcMem)
Run Code Online (Sandbox Code Playgroud)

然后在程序结束时:

ReleaseDC(hWnd, hDC);
Run Code Online (Sandbox Code Playgroud)

是否有可能在代码的各个地方进行所有绘图和对象选择导致这些"半罕见"问题?

另外,忘记注意,任何地方都没有GDI泄漏.

c++ winapi

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

不使用其构造函数的C++类声明

我偶然发现了几次,最后删除了初始构造函数.我搜索了谷歌,但我甚至不知道这是什么叫...

class you {

    private:
        string name;
        int number; 
        COLORREF color;   
        drinks favoriteDrink;  // here

    public:
        you(string Name, int Number, COLORREF Color);
        string GetName();
        int GetNumber();
        COLORREF GetColor();

};
Run Code Online (Sandbox Code Playgroud)

Drinks是另一个类,它的构造函数如下:(int x,bool y).我想进一步初始化它.再次,通常我只是删除构造函数并编写一个函数ex:init(w/e).有没有办法做到这一点?

c++ constructor

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

C++使用std :: sscanf和std :: string

我想从字符串中"提取"信息.字符串始终采用格式int int char.

我花了很多时间在这上面,检查了这个网站和谷歌我发现的"每个"例子,但无济于事.编译了一些示例,但崩溃了(没有溢出.)

这是当前的,它编译但崩溃.

// Data                    
string str = "53 25 S";
int num1;
int num2;
char type3;

// Read values                                  
sscanf(str.c_str(),"%i %i %c",num1,num2,type3);
Run Code Online (Sandbox Code Playgroud)

c++ string scanf

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

C++代码无法正常工作

我是StackExchange的新手,但我有一个简单的类,当我运行它时似乎没有返回正确的结果.这是代码:

#include <iostream>

using namespace std;

int thisIsHowYouIfLikeABoss2(int, int);

int main()
{
     cout << "One." << endl;
     thisIsHowYouIfLikeABoss2(9, 9);
     cout << "Two." << endl;
     thisIsHowYouIfLikeABoss2(4, 9);
    return 0;
}

 int thisIsHowYouIfLikeABoss2 (int x, int y)
 {
    cout << "Welcome to the thisIsHowYouIfLikeABoss(), where I calculate if x = y easily." << endl;
    if (x = y)
    {
        cout << "X is Y." << endl;
    }
    if (x != y)
    {
        cout << "X is not Y" << endl;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
68
查看次数

为什么代码在"返回"后仍在运行

我发现我的代码在点击"返回表"后仍在运行 (我已经运行了调试模式,它真的向前移动到下一行,为什么一旦调用return语句,我的函数不应该立即结束(退出)?我的递归有什么问题吗?

public static HtmlTable getTableFromDomElement(DomElement element) throws Exception{

    if(element instanceof com.gargoylesoftware.htmlunit.html.HtmlTable){
        System.out.println("----YES!!!!-----");
        HtmlTable table = (HtmlTable) element;
        return table;
    }

    for(DomElement e : element.getChildElements()){         
            getTableFromDomElement(e);
        }

    throw new Exception("No HTML table found");
}
Run Code Online (Sandbox Code Playgroud)

输出:

----YES!!!!-----

Exception in thread "main" java.lang.Exception: No HTML table found

java recursion

0
推荐指数
1
解决办法
92
查看次数

C++遇到sscanf模式的问题

我试图"提取"名称和下一个整数.当我运行它时,我得到一个运行时错误.我测试没有字符串,它运行正常.

// Test string
std::string show = "BlahBlah 3";

// Pickup string and int
std::string nameString;
int id;
sscanf(show.c_str(), "%s %i", &nameString, &id);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c++ scanf

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

Color16值的C++ Unicode

这是一个令人头痛的问题.我搜索了一切,发现很少,对unicode知之甚少,从搜索中学到了一点.我需要的是非常简单的,对吧?我正在使用的结构需要COLOR16.

所以我知道0x0000和0x00FF是0到255,这对COLOR16来说是没用的.

我看到的每个可以代表0到15的四个零.

我知道COLOR16代表所有16 ^ 4种颜色.

但我不能为我的生活弄清楚如何将(R:100; G:35; B:42)转换为unicode值.

我真的可以使用这方面的一些信息,或教程或任何东西.

谢谢.

c++ unicode

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

因为某些原因,循环继续

#include <iostream>

using namespace std;

int main()
{
    int lists[30];
    lists[30] = 30;
    lists[0] = 31;
    cout << lists[30];
    cout << "\n";
    cout << lists[0];
    for(int a = 0; a < lists[30]+lists[0]; a++)
    {
        cout << "\n";
        cout << lists[2];
    }
}
Run Code Online (Sandbox Code Playgroud)

在for循环之后,它应该只显示列表[2]的值61次; 列表[30] = 30并列出[0] = 31,所以组合它们是61. for循环中的表达式是否有效?它似乎永远循环.

c++ loops for-loop

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

标签 统计

c++ ×11

winapi ×3

scanf ×2

button ×1

c ×1

class ×1

constructor ×1

for-loop ×1

java ×1

keyboard-hook ×1

loops ×1

pointers ×1

recursion ×1

string ×1

struct ×1

toggle ×1

unicode ×1