错误C2678:二进制'=':找不到运算符? [英] error C2678: binary '=': no operator found?
问题描述
我收到以下错误:
错误C2678:binary'=':找不到运算符,它接受类型为'const xe :: kernel的左操作数: :shim :: ParamBase< uint32_t>'
error C2678: binary '=': no operator found which takes a left-hand operand of type 'const xe::kernel::shim::ParamBase<uint32_t>'
现在我正在更改代码:
SHIM_CALL XamUserAreUsersFriends_shim(PPCContext* ppc_context,
KernelState* kernel_state) {
uint32_t user_index = SHIM_GET_ARG_32(0);
uint32_t unk1 = SHIM_GET_ARG_32(1);
uint32_t unk2 = SHIM_GET_ARG_32(2);
uint32_t out_value_ptr = SHIM_GET_ARG_32(3);
uint32_t overlapped_ptr = SHIM_GET_ARG_32(4);
XELOGD("XamUserAreUsersFriends(%d, %.8X, %.8X, %.8X, %.8X)", user_index, unk1,
unk2, out_value_ptr, overlapped_ptr);
if (user_index == 255) {
user_index = 0;
}
SHIM_SET_MEM_32(out_value_ptr, 0);
if (user_index) {
// Only support user 0.
SHIM_SET_RETURN_32(X_ERROR_NOT_LOGGED_ON);
return;
}
X_RESULT result = X_ERROR_SUCCESS;
const auto& user_profile = kernel_state->user_profile();
if (user_profile->signin_state() == 0) {
result = X_ERROR_NOT_LOGGED_ON;
}
// No friends!
SHIM_SET_MEM_32(out_value_ptr, 0);
if (overlapped_ptr) {
kernel_state->CompleteOverlappedImmediate(overlapped_ptr, result);
SHIM_SET_RETURN_32(X_ERROR_IO_PENDING);
} else {
SHIM_SET_RETURN_32(result);
}
}
对此:
dword_result_t XamUserAreUsersFriends(dword_t user_index, unknown_t unk1, unknown_t unk2, lpvoid_t out_value_ptr, pointer_t<XAM_OVERLAPPED> overlapped_ptr) {
if (user_index == 255) {
user_index = 0;
}
*out_value_ptr = 0;
if (user_index) {
// Only support user 0.
return X_ERROR_NOT_LOGGED_ON;
}
X_RESULT result = X_ERROR_SUCCESS;
const auto& user_profile = kernel_state()->user_profile();
if (user_profile->signin_state() == 0) {
result = X_ERROR_NOT_LOGGED_ON;
}
// No friends!
*out_value_ptr = 0;
if (overlapped_ptr) {
kernel_state()->CompleteOverlappedImmediate(overlapped_ptr, result);
return X_ERROR_IO_PENDING;
}
else {
return result;
}
}
DECLARE_XAM_EXPORT(XamUserAreUsersFriends, ExportTag::kImplemented);
根据此参考:
- 使用 int_t =
const shim :: ParamBase < int32_t > & ; < li style ="font-weight:normal; vertical-align:top">
- using int_t = const shim::ParamBase<int32_t>&;
使用 word_t =
const shim :: ParamBase < uint16_t > & ;
推荐答案
6月15日/ 2017 2:39 PM,drillsar写道:
On 6/15/2017 2:39 PM, drillsar wrote:
我收到以下错误:
$
错误C2678:binary'=':没有运算符发现哪个采用类型'const xe :: kernel :: shim :: paramBase< uint32_t>'的左手操作数'
I get the following error:
error C2678: binary '=': no operator found which takes a left-hand operand of type 'const xe::kernel::shim::ParamBase<uint32_t>'
using dword_t =const shim::ParamBase<uint32_t>&;
dword_result_t XamUserAreUsersFriends(dword_t user_index, unknown_t unk1, unknown_t unk2, lpvoid_t out_value_ptr, pointer_t<XAM_OVERLAPPED> overlapped_ptr) {
if (user_index == 255) {
user_index = 0;
}
user_index的类型为const shim :: ParamBase< uint32_t>& 。它是常量,但您正在尝试修改它。因此错误。
user_index is of type const shim::ParamBase<uint32_t>& . It's const, but you are trying to modify it. Hence the error.
这篇关于错误C2678:二进制'=':找不到运算符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!