- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试编写一个 native Node 插件,它枚举 Windows 机器上的所有窗口并将它们的标题数组返回给 JS userland。
但是我被这个错误难住了:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmemory0(655): error C3074: an array cannot be initialized with a parenthesized initializer [C:\xampp\htdocs\enum-windows\build\enumWindows.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xmemory0(773): note: see reference to function template instantiation 'void std::allocator<_Ty>::construct<_Objty,char(&)[255]>(_Objty (*),char (&)[255])' being comp iled with [ _Ty=char [255], _Objty=char [255] ]
据我所知,我没有执行数组的括号初始化?
#include <vector>
#include <node.h>
#include <v8.h>
#include <windows.h>
#include <stdio.h>
using namespace node;
using namespace v8;
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM ptr) {
std::vector<char[255]>* windowTitles =
reinterpret_cast<std::vector<char[255]>*>(ptr);
if (IsWindowVisible(hWnd)) {
int size = GetWindowTextLength(hWnd);
char buff[255];
GetWindowText(hWnd, (LPSTR) buff, size);
windowTitles->push_back(buff);
}
return true;
};
void GetWindowTexts(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
Local<Array> arr = Array::New(isolate);
std::vector<char[255]> windowTitles;
EnumWindows(
&EnumWindowsProc,
reinterpret_cast<LPARAM>(&windowTitles));
for (unsigned int i = 0; i < windowTitles.size(); i++) {
const char* ch = reinterpret_cast<const char*>(windowTitles.at(i));
Local<String> str = String::NewFromUtf8(isolate, ch);
arr->Set(i, str);
}
args.GetReturnValue().Set(arr);
}
void init(Handle<Object> exports, Handle<Object> module) {
NODE_SET_METHOD(module, "exports", GetWindowTexts);
}
NODE_MODULE(enumWindows, init);
我认为错误与这一行有关:
windowTitles->push_back(buff);
也许我的做法很幼稚。
最佳答案
问题出现在这里:
windowTitles->push_back(buff);
因为你cannot store an array in std::vector
.
来自链接的答案:
The objects stored by a standard library container must be copyable and assignable, and arrays are neither of these.
也许使用类似下面的东西。该数组已替换为 std::array<char,255>
:
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM ptr)
{
std::vector<std::array<char,255>>* windowTitles =
reinterpret_cast<std::vector<std::array<char,255>>*>(ptr);
if (IsWindowVisible(hWnd)) {
int size = GetWindowTextLength(hWnd);
std::array<char,255> buff;
GetWindowText(hWnd,(LPWSTR)buff.data(),size);
windowTitles->push_back(buff);
}
return true;
};
关于c++ - 错误 C7034 : an array cannot be initialized with a parenthesized initializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992622/
我是一名优秀的程序员,十分优秀!