在下面更新
我正在尝试创建此包装器以包含指向所有其他类的指针.我遇到了这个问题(例子):
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'*"
这可能是一个愚蠢的问题,但无论如何我都要问它:
假设您有一个指针: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 程序中,我使用backtrace获取函数调用堆栈,然后使用backtrace的输出通过backtrace_symbols获取函数名称。生成的字符串包含函数名称和调用启动代码的地址以及该函数。有没有办法将这些地址转换为文件名和行号?我的意思是使用 gcc 扩展的 C 库(仅适用于 Linux)。提前致谢!
我原本以为这会非常容易.谷歌搜索返回的结果除此之外的一切.
我正在尝试使用一个可以单击的普通按钮,它会保持向下,再次单击,然后再次上升.
我找到了一个功能,它做了我想要的,但只有按钮保持焦点,点击其他任何地方,然后它再次上升.
Button_SetState(GetDlgItem(hwnd, IDC_BTN_SLEEPCLICK), TRUE);
有没有真正的方法来做到这一点?或者我需要手工做这种事情?
谢谢.
我在尝试使用键盘钩时遇到问题.我想做的(并且确实)是从任何窗口/焦点,我可以点击一个运行一个功能的键(移动鼠标和点击.)
它从前面工作得很好,但是一旦我开始做其他事情,一切都很奇怪(即使在关闭问题之后.)
在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)
谢谢阅读.
在我的程序(游戏)中,我进行了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泄漏.
我偶然发现了几次,最后删除了初始构造函数.我搜索了谷歌,但我甚至不知道这是什么叫...
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).有没有办法做到这一点?
我想从字符串中"提取"信息.字符串始终采用格式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) 我是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) 我发现我的代码在点击"返回表"后仍在运行 (我已经运行了调试模式,它真的向前移动到下一行,为什么一旦调用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
我试图"提取"名称和下一个整数.当我运行它时,我得到一个运行时错误.我测试没有字符串,它运行正常.
// 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)
我究竟做错了什么?
这是一个令人头痛的问题.我搜索了一切,发现很少,对unicode知之甚少,从搜索中学到了一点.我需要的是非常简单的,对吧?我正在使用的结构需要COLOR16.
所以我知道0x0000和0x00FF是0到255,这对COLOR16来说是没用的.
我看到的每个可以代表0到15的四个零.
我知道COLOR16代表所有16 ^ 4种颜色.
但我不能为我的生活弄清楚如何将(R:100; G:35; B:42)转换为unicode值.
我真的可以使用这方面的一些信息,或教程或任何东西.
谢谢.
#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循环中的表达式是否有效?它似乎永远循环.