小编Inc*_*bus的帖子

在std :: map中使用std :: tm作为Key

我想使用std :: tm()作为std :: map-container的键.但是当我尝试编译它时,我得到了很多(10)错误.

例如:

1.

错误C2784:'bool std :: operator <(const std :: basic_string <_Elem,_Traits,_Alloc>&,const _Elem*)':无法推断'const std :: basic_string <_Elem,_Traits,_Alloc>的模板参数&'from'const tm'c:\ program files(x86)\ microsoft visual studio 10.0\vc\include\xfunctional 125

2.

错误C2784:'bool std :: operator <(const _Elem*,const std :: basic_string <_Elem,_Traits,_Alloc>&)':无法从'const tm'c:\中推断'const _Elem*'的模板参数程序文件(x86)\ microsoft visual studio 10.0\vc\include\xfunctional 125

3.

错误C2784:'bool std :: operator <(const std :: vector <_Ty,_Ax>&,const std :: vector <_Ty,_Ax>&)':无法推断'const std :: vector <的模板参数_Ty,_Ax>&'from'const tm'c:\ program files(x86)\ microsoft visual studio 10.0\vc\include\xfunctional 125

这一切是否意味着,我"只是"必须创建一个比较两个std :: tm的函数对象,因为没有为此定义的标准比较?还是有另一招?(或者对我来说甚至可能不可能?^^)

码:

#include <map>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ key map function-object

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

混合c ++异常处理和SEH(windows)

我有一个函数,我调用它getaddrinfo()来获取sockaddr*系统分配的目标内存.许多人可能知道,你需要调用freeaddrinfo()来释放getaddrinfo()分配的内存.

现在,在我的函数中,有一些地方,我可能会抛出异常,因为某些函数失败了.我的第一个解决方案是将freeaddrinfo()每个if块整合到一起.但对我来说这看起来确实很难看,因为在我的函数返回之前我不得不调用它,所以我想出了SEH的尝试 - 终于......

但我遇到的问题是,不允许将throw语句编码到__try-block中

然后,我读了msdn并尝试将throw语句交换到__try-block中调用的辅助函数...瞧,编译器不再呻吟了......

这是为什么?这样安全吗?这对我来说没有意义:/

码:

void function()
{
    //...
    addrinfo* pFinal;
    __try
    {
        getaddrinfo(..., &pFinal);

        //if(DoSomething1() == FAILED)
        //  throw(exception);           //error C2712: Cannot use __try in functions that require object unwinding

        //but this works
        Helper();


        //...

    }
    __finally
    {
        freeaddrinfo();
    }
}


void Helper()
{
    throw(Exception);
}
Run Code Online (Sandbox Code Playgroud)

编辑:

尝试了下面的内容,它可以抛出一个整数,但是当我使用一个类作为例外时却不行:

class X
{
public:
    X(){};
    ~X(){};
};


void Helper()
{
    throw(X());
}


void base()
{
    __try
        {
            std::cout << "entering …
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling seh structured-exception

5
推荐指数
2
解决办法
2559
查看次数

如何模拟原始输入/以正确的方式向应用程序发送WM_INPUT消息?

我正在尝试向应用程序发送WM_INPUT消息,但是遇到一些我无法解决的障碍。我创建了如下的RAWINPUT结构:

//try sending 'W'
    RAWINPUT raw = {0};
    char c = 'W';
    //header
    raw.header.dwSize = sizeof(raw);
    raw.header.dwType = RIM_TYPEKEYBOARD;
    raw.header.wParam = 0; //(wParam & 0xff =0 => 0)
    raw.header.hDevice = hDevice;

    //data
    raw.data.keyboard.Reserved = 0;
    raw.data.keyboard.Flags = RI_KEY_MAKE;      //Key down
    raw.data.keyboard.MakeCode = static_cast<WORD>(MapVirtualKeyEx(c, MAPVK_VK_TO_VSC, GetKeyboardLayout(0)));
    raw.data.keyboard.Message = WM_KEYDOWN;
    raw.data.keyboard.VKey = VkKeyScanEx(c, GetKeyboardLayout(0));
    raw.data.keyboard.ExtraInformation = 0;         //???

    //Send the message
    SendMessage(hPSWnd, WM_INPUT, 0, (LPARAM)raw/*Raw input handle*/);      //TODO: Handle to raw input
Run Code Online (Sandbox Code Playgroud)

我卡住的位置至少是两个位置:

  1. 是否需要将特殊的东西传递给raw.data.keyboard.ExtraInformation,或者是GetMessageExtraInfo(),或者是否不需要在这里传递任何东西?

  2. WM_INPUT消息的LPARAM参数包含RAWINPUT结构的句柄,而不是地址或结构本身...如何创建这样的句柄?

我不想使用SendInput,因为它要求该窗口为活动窗口。我已经做到了,并且工作正常,但是当我激活另一个窗口时(当然),它停止了在前一个窗口上的工作。

因此,我想实现的目标是,将输入发送到不需要处于活动状态的应用程序。

c++ windows raw-input keyboard-events visual-c++

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

winsock:使用本地主机 (127.0.0.1) 时,连接失败并出现错误 10049

我写了一个封装了一些 winsock 函数的类来模拟一个简单的 TCP 套接字以满足我的需要......

当我尝试运行一个简单的连接和发送数据到服务器测试时,“客户端”在调用连接时失败,错误代码为 10049 (WSAEADDRNOTAVAIL)连接功能在 MSDN

我正在做的是(下面的代码): 服务器:

  1. 创建服务器套接字 -> 将其绑定到端口 12345
  2. 将 Socket 置于监听模式
  3. 来电接听

客户

  1. 创建一个套接字 -> 将其绑定到一个随机端口
  2. 调用 Connect:连接到localhost,端口 12345

=> 连接调用失败,错误 10049,如上所述

这是包括“服务器”在内的主要功能:

HANDLE hThread = NULL;
Inc::CSocketTCP ServerSock;
Inc::CSocketTCP ClientSock;

try
{

    ServerSock.Bind(L"", L"12345");
    ServerSock.Listen(10);

    //Spawn the senders-thread
    hThread = (HANDLE)_beginthreadex(nullptr, 0, Procy, nullptr, 0, nullptr);

    //accept
    ServerSock.Accept(ClientSock);


    //Adjust the maximum packet size
    ClientSock.SetPacketSize(100);


    //receive data
    std::wstring Data;
    ClientSock.Receive(Data);

    std::wcout << "Received:\t" << Data << std::endl;
}
catch(std::exception& e) …
Run Code Online (Sandbox Code Playgroud)

c++ sockets windows winsock connect

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

矢量无效的分配大小

当我尝试创建和调整向量以保持最大项目数(vector :: max_size())时,我在运行时遇到调试错误:

"无效的分配大小:429467292"

我想知道为什么你不能调整大小,如果max_size()应该返回向量中的最大项目数...

vector<int> vc;
vc.resize(vc.max_size());
Run Code Online (Sandbox Code Playgroud)

我也尝试启用LARGADRESSAWARE:在VS2010中启用,但这没有帮助.想知道这是否是一个正确的thoguth ...

有人知道吗?

c++ size stl vector std

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

断言内的Lambda

是否有可能在调用中使用lambda assert()

当我尝试以下...

assert([&]() -> bool{
        sockaddr_storage addr; int addrlen = sizeof(addr);
        return (getsockname(this->m_Socket, (sockaddr*)&addr, &addrlen) != 0) ? false : true;
    });
Run Code Online (Sandbox Code Playgroud)

......我收到了错误

错误C2675:一元'!' :'`anonymous-namespace'::'没有定义此运算符或转换为预定义运算符可接受的类型

c++ lambda assert

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

PHP PDO Update: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

I know this problem came multiple times, but i cannot find the mistake in my code. In my update-branch every $stmt->bindValue(...) returns TRUE, but i catch the pdo exception

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Inserting a new entry works fine.

In my mysql-database the structure of table 'system' is:

id -> int(11), primary key
computer_name -> varchar(255)
cpu_speed -> int(11)
ram_size -> int(11)
mac_address -> varchar(255)
operating_system -> varchar(255)
Run Code Online (Sandbox Code Playgroud)

My error-throwing code:

// Search for mac_address.
// …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

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

确定未绑定套接字的地址族

当我尝试绑定我的套接字时,我需要在addrinfo/sockaddr-structure中指定地址系列,我将其传递给对bind()的调用,否则将获得winsock错误10047(协议族不支持的地址族).

如果我创建了一个不知道其地址族的套接字怎么办...怎样才能得到该套接字的地址族,所以我可以绑定它?

getsockname仅适用于绑定套接字:/ ...

我不想强迫我的函数调用者将地址族传递给我的函数,特别是如果她/他/它在创建她/他的套接字时使用AF_UNSPEC/PF_UNSPEC

(例如SOCKET sock = socket(AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP);)

c++ sockets networking bind winsock

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

将std :: unique_ptr作为参数传递给函数

我有一个结构和功能如下:

struct MYOVERLAPPED : public OVERLAPPED
{
    //...
};


void func1(std::unique_ptr<MYOVERLAPPED> pBuf)
{
    //...
};
Run Code Online (Sandbox Code Playgroud)

我正在获取一个指向MYOVERLAPPED的指针,我希望将其传递给func1函数.我遇到的问题是,无论我尝试什么,我都会收到以下错误:

我尝试过的是以下内容:Try1:

std::unique_ptr<OVERLAPPED> pOver(//....)
HandleAcceptIndication(std::move(pOver));
Run Code Online (Sandbox Code Playgroud)

错误:错误1错误C2440:'初始化':无法从'_OVERLAPPED**'转换为'MYOVERLAPPED*'

Try2:

HandleAcceptIndication(new ACCEPT_OVERLAPPED);
Run Code Online (Sandbox Code Playgroud)

错误1错误C2664:'HandleAcceptIndication':无法将参数1从'MYOVERLAPPED*'转换为'std :: unique_ptr <_Ty>'

任何人都知道我怎么能把这个OVERLAPPED的指针指针传递给MYOVERLAPPED函数以及为什么Try2不起作用,因为我随便使用std::unique_ptr<MYOVERLAPPED> pO(new MYOVERLAPPED) 哪个工作......?

c++ parameters compiler-errors function unique-ptr

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

GetQueuedCompletionStatus 在远程套接字关闭时返回 ERROR_NETNAME_DELETED

我正在使用 I/O-Completion Port 编写一个小的服务器-客户端的东西。

我通过我的完成端口通过 AcceptEx 成功连接了服务器和客户端。客户端连接后,客户端套接字与完成端口相关联,并在该套接字上调用对 WSARecv 的重叠调用。

一切正常,直到我关闭客户端测试程序。 GetQueuedCompletionStatus()退货FALSEGetLastError退货

ERROR_NETNAME_DELETED

,这对我来说很有意义(在我阅读了 MSDN 上的描述之后)。

但我的问题是,我认为调用GetQueuedCompletionStatus会返回一个数据包,表明由于套接字关闭而失败,因为WSARecv会返回适当的返回值。由于情况并非如此,我不知道哪个客户端的套接字导致了错误并且无法按照我需要的方式行事(释放结构,清理此特定连接等)...

关于如何解决这个问题的任何建议或提示?

谢谢:)

编辑:http : //codepad.org/WeYINa​​sO <- 负责的代码......“错误”发生在 while 循环的第一个函数开始处(对它的调用GetCompletionStatus()只是 GetQueuedCompletionStatus() 工作正常的包装器其他情况)[确实把它贴在那里,因为它在这里看起来又脏又乱]

winsock getlasterror io-completion-ports

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

(晃来晃去?)从函数返回的引用不"工作"

我按照V. Romeo的实体管理教程(在GitHubYoutube上).

然后我尝试重写类CEntity,CComponent和测试CPosition(主要来自Romeo视频/代码的内存).我遇到的问题是,在我的主要我在堆栈上创建一个CEntity并添加一个组件.当我通过i添加组件时,addComponent()获取对新创建的组件的引用,返回addComponent().

当我现在想要通过返回的引用修改组件时,我所做的更改不会反映回实体(组件).看起来像是对我的悬空参考,但我无法找到我犯的错误.

谁能指出我在这里做错了什么?

掌握我的CEntity课程:

#include <array>
#include <bitset>
#include <memory>
#include <cassert>
#include <stdexcept>

namespace inc
{

using ComponentID = unsigned int;

ComponentID getNewID()
{
    static ComponentID id = 0;
    return id++;
}

template <typename T>
ComponentID getComponentID()
{
    static ComponentID component_id = getNewID();
    return component_id;
}

// Forward declarations used by CEntity:
struct CComponent;

class CEntity
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ pointers reference unique-ptr

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

子目录中的 Ionic Angular pwa

我有一个Ionic (5) Angular应用程序,其 PWA packges 设置为ng add @angular/pwa --project app(在 angular.json 中它仍然命名为“app”,所以--project app应该是正确的)。

当我使用服务提供生产构建时,一切都在我的本地计算机上运行良好(我被要求安装pwa应用程序,离线模式工作等)。

但我想从子目录在我的服务器上托管 PWA,如https://example.com/www. 所以我调整了index.html<head>以包含<base href="/www/ />并将.htaccess放入我的服务器上的www文件夹中,其中包含

<IfModule mod_rewrite.c>
    RewriteEngine On

    # -- REDIRECTION to https (optional):
    # If you need this, uncomment the next two commands
    # RewriteCond %{HTTPS} !on
    # RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    # --

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d

    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(.*) index.html [NC,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中(Chrome、Firefox、Androd 上的 …

ionic-framework service-worker progressive-web-apps angular angular-service-worker

0
推荐指数
2
解决办法
1617
查看次数