RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

问题[visual-c++]

Martin Hope
Андрей Асафов
Asked: 2024-11-11 00:43:52 +0000 UTC

如何像 vs 2022 c++ 一样配置 vs code

  • 4

我静静地坐在VS 2022上很长一段时间,没有出现任何问题。通过“本地Windows调试器”一键启动代码,我没有任何问题,但是现在,当我需要使用Git时,需要VS Code,我必须先在VS 2022中编写代码,然后将其复制到 VS Code 以便发送。因此问题就出现了:

如何正确配置 VS Code 进行调试。

唯一的事情是我能够用 clang 以某种方式构建项目,但这是一个程序集而不是调试(:是的,我阅读了 VS Code 文档(https://code.visualstudio.com/docs/cpp/ config-msvc)但仍然没有理解。

visual-c++
  • 1 个回答
  • 44 Views
Martin Hope
meiiion
Asked: 2022-07-30 16:56:33 +0000 UTC

编译期 MurmurHash

  • 2

找到这段代码:

#pragma once

#ifndef CONSTEXPR_MURMUR3_HASH_CONSTEXPR_MURMUR3_H
#define CONSTEXPR_MURMUR3_HASH_CONSTEXPR_MURMUR3_H

#include <stdint.h>
#include <stdexcept>

namespace ce_mm3 {

    // Heavily based on sample code from
    // http://en.cppreference.com/w/cpp/concept/LiteralType
    class str_view {
    public:
        template <std::size_t N>
        constexpr str_view(const char(&a)[N])
            : p(a), sz(N - 1) {}

        constexpr char operator[](std::size_t n) const {
            return n < sz ? p[n] : throw std::out_of_range("");
        }

        constexpr uint32_t get_block(int idx) {
            int i = (block_size() + idx) * 4;
            uint32_t b0 = p[i];
            uint32_t b1 = p[i + 1];
            uint32_t b2 = p[i + 2];
            uint32_t b3 = p[i + 3];
            return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
        }

        constexpr std::size_t size() const { return sz; }

        constexpr std::size_t block_size() const { return sz / 4; }

        constexpr char tail(const int n) const {
            int tail_size = sz % 4;
            return p[sz - tail_size + n];
        }

    private:
        const char* p;
        std::size_t sz;
    };

    constexpr uint32_t mm3_x86_32(str_view key, uint32_t seed) {
        uint32_t h1 = seed;

        const uint32_t c1 = 0xcc9e2d51;
        const uint32_t c2 = 0x1b873593;

        const int nblocks = key.size() / 4;
        for (int i = -nblocks; i; i++) {
            uint32_t k1 = key.get_block(i);

            k1 *= c1;
            k1 = (k1 << 15) | (k1 >> (32 - 15));
            k1 *= c2;

            h1 ^= k1;
            h1 = (h1 << 13) | (h1 >> (32 - 13));
            h1 = h1 * 5 + 0xe6546b64;
        }

        uint32_t k1 = 0;

        switch (key.size() & 3) {
        case 3:
            k1 ^= key.tail(2) << 16;
        case 2:
            k1 ^= key.tail(1) << 8;
        case 1:
            k1 ^= key.tail(0);
            k1 *= c1;
            k1 = (k1 << 15) | (k1 >> (32 - 15));
            k1 *= c2;
            h1 ^= k1;
        };

        h1 ^= key.size();

        h1 ^= h1 >> 16;
        h1 *= 0x85ebca6b;
        h1 ^= h1 >> 13;
        h1 *= 0xc2b2ae35;
        h1 ^= h1 >> 16;

        return h1;
    }
}

#endif

问题是如果你这样调用函数,函数会在运行时运行:printf("0x%08X", mm3_x86_32("hello", 0))或者这样uint32_t hash = mm3_x86_32("hello", 0)

我还发现了另一个代码:

// MurmurHash Template Metaprogramming Implementation 
// https://github.com/dcoded/MurmurHash

/*
The MIT License (MIT)

Copyright (c) 2015 Denis Coady

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

#include <cstdint>

/*

This implementation follows the following algorithm originally found at:
https://en.wikipedia.org/wiki/MurmurHash

Murmur3_32(key, len, seed)
    // Note: In this version, all integer arithmetic is performed with
    // unsigned 32 bit integers.
    // In the case of overflow, the result is constrained by the
    // application of modulo 2^{32} arithmetic.

    c1 ← 0xcc9e2d51
    c2 ← 0x1b873593
    r1 ← 15
    r2 ← 13
    m ← 5
    n ← 0xe6546b64

    hash ← seed

    for each fourByteChunk of key
        k ← fourByteChunk

        k ← k × c1
        k ← (k ROL r1)
        k ← k × c2

        hash ← hash XOR k
        hash ← (hash ROL r2)
        hash ← hash × m + n

    with any remainingBytesInKey
        remainingBytes ← SwapEndianOrderOf(remainingBytesInKey)
        // Note: Endian swapping is only necessary on big-endian machines.
        //       The purpose is to place the meaningful digits towards the low
        //       end of the value, so that these digits have the greatest
        //       potential to affect the low range digits in the subsequent
        //       multiplication.  Consider that locating the meaningful digits
        //       in the high range would produce a greater effect upon the high
        //       digits of the multiplication, and notably, that such high
        //       digits are likely to be discarded by the modulo arithmetic
        //       under overflow.  We don't want that.

        remainingBytes ← remainingBytes × c1
        remainingBytes ← (remainingBytes ROL r1)
        remainingBytes ← remainingBytes × c2

        hash ← hash XOR remainingBytes

    hash ← hash XOR len

    hash ← hash XOR (hash >> 16)
    hash ← hash × 0x85ebca6b
    hash ← hash XOR (hash >> 13)
    hash ← hash × 0xc2b2ae35
    hash ← hash XOR (hash >> 16)

*/

/* Define Magic Constants */
#define C1 0xcc9e2d51
#define C2 0x1b873593
#define R1 15
#define R2 13
#define M 5
#define N 0xe6546b64

// Forward declaration of implementation
template<std::uint32_t Hash, std::uint32_t Length, char... Args>
struct MurmurHash32Impl;

// Public interface function.
//
// Usage:
//      std::uint32_t x = MurmurHash<'H','i'>::value;
//
template<std::uint32_t Seed, char...Chars>
struct MurmurHash32 {
    enum { value = MurmurHash32Impl<Seed, 0, Chars...>::value };
};

// Covers final hash calculations, no more characters
template <std::uint32_t Hash, std::uint32_t Length>
struct MurmurHash32Impl<Hash, Length> {
    // hash ^= len;
    enum { Hash1 = Hash ^ Length };
    // hash ^= (hash >> 16);
    enum { Hash2 = Hash1 ^ (Hash1 >> 16) };
    // hash *= 0x85ebca6b;
    enum { Hash3 = Hash2 * 0x85ebca6b };
    // hash ^= (hash >> 13);
    enum { Hash4 = Hash3 ^ (Hash3 >> 13) };
    // hash *= 0xc2b2ae35;
    enum { Hash5 = Hash4 * 0xc2b2ae35 };
    // hash ^= (hash >> 16);
    enum { Hash6 = Hash5 ^ (Hash5 >> 16) };

    enum { value = Hash6 };
};

// Calculates 1 remaining byte
template <std::uint32_t Hash, std::uint32_t Length, char A>
struct MurmurHash32Impl<Hash, Length, A> {
    // remainingBytes ← remainingBytes × c1
    enum { K0 = 0x00000000 ^ A };
    // remainingBytes ← remainingBytes × c1
    enum { K1 = K0 * C1 };
    // remainingBytes ← (remainingBytes ROL r1)
    enum { K2 = (K1 << R1) | (K1 >> (32 - R1)) };
    // remainingBytes ← remainingBytes × c2
    enum { K3 = K2 * C2 };
    // hash ← hash XOR remainingBytes
    enum { Hash1 = Hash ^ K3 };
    // No more string, just final hash manipulations
    enum { value = MurmurHash32Impl<Hash1, Length + 1>::value };
};

// Calculates 2 remaining bytes
template <std::uint32_t Hash, std::uint32_t Length, char A, char B>
struct MurmurHash32Impl<Hash, Length, A, B> {
    enum { K0 = 0x00000000 ^ (B << 8) };
    enum { K1 = K0 ^ A };
    // remainingBytes ← remainingBytes × c1
    enum { K2 = K1 * C1 };
    // remainingBytes ← (remainingBytes ROL r1)
    enum { K3 = (K2 << R1) | (K2 >> (32 - R1)) };
    // remainingBytes ← remainingBytes × c2
    enum { K4 = K3 * C2 };
    // hash ← hash XOR remainingBytes
    enum { Hash1 = Hash ^ K4 };
    // No more string, just final hash manipulations
    enum { value = MurmurHash32Impl<Hash1, Length + 2>::value };
};

// Calculates 3 remaining bytes
template <std::uint32_t Hash, std::uint32_t Length, char A, char B, char C>
struct MurmurHash32Impl<Hash, Length, A, B, C> {
    enum { K0 = 0 ^ (C << 16) };
    enum { K1 = K0 ^ (B << 8) };
    enum { K2 = K1 ^ A };
    // remainingBytes ← remainingBytes × c1
    enum { K3 = K2 * C1 };
    // remainingBytes ← (remainingBytes ROL r1)
    enum { K4 = (K3 << R1) | (K3 >> (32 - R1)) };
    // remainingBytes ← remainingBytes × c2
    enum { K5 = K4 * C2 };
    // hash ← hash XOR remainingBytes
    enum { Hash1 = Hash ^ K5 };
    // No more string, just final hash manipulations
    enum { value = MurmurHash32Impl<Hash1, Length + 3>::value };
};

// Calculates a full block (4 bytes)
template <std::uint32_t Hash, std::uint32_t Length, char A, char B, char C, char D, char...Tail>
struct MurmurHash32Impl<Hash, Length, A, B, C, D, Tail...> {
    // k ← fourByteChunk
    enum { K0 = (D << 24) | (C << 16) | (B << 8) | A };
    // k ← k × c1
    enum { K1 = K0 * C1 };
    // k ← (k ROL r1)
    enum { K2 = (K1 << R1) | (K1 >> (32 - R1)) };
    // k ← k × c2
    enum { K3 = K2 * C2 };
    // hash ← hash XOR k
    enum { Hash1 = Hash ^ K3 };
    // hash ← (hash ROL r2)
    enum { Hash2 = (Hash1 << R2) | (Hash1 >> (32 - R2)) };
    // hash ← hash × m + n
    enum { Hash3 = Hash2 * M + N };
    // Calculate rest of string and final hash manipulations
    enum { value = MurmurHash32Impl<Hash3, Length + 4, Tail...>::value };
};

能否以某种方式更改第二个代码,以便可以通过将其作为参数传递给函数来使用它,而不必为哈希值创建单独的 constexpr 变量?MurmurHash32<0, 'h', 'e', 'l', 'l', 'o'>因为如果您使用大字符串和大量字符串,将一个字符传输到模板不是很方便。

c++ visual-c++
  • 1 个回答
  • 42 Views
Martin Hope
Koli
Asked: 2022-07-24 00:30:36 +0000 UTC

根据以下分配开发类Set“整数集”

  • -1

实现具有以下接口的有限整数类:

    class Set
{
    int size; // размер множества !!power
    int count; // количество элементов в множестве !!max
    int* p; // указатель на массив элементов
public:
    // конструкторы
    Set(const int& _size = 0); // по умолчанию
    Set(const Set& s); // копирования
    // деструктор
    ~Set() { };
    // функции члены класса
    int getSize() const; // размерность множества
    int getCount() const; // количество элементов в множестве
    void include(const int& n); // включить элемент
    bool exclude(const int& n); // исключить элемент
    void empty(); // очистка множества
    bool isInSet(const int& n) const; // есть такой элемент? 
    // операторы члены класса
    Set& operator =(const Set& s); // присваивание множеств
    Set& operator +=(const Set& s); // объединение множеств
    Set& operator -=(const Set& s); // разность множеств
    Set& operator *=(const Set& s); // пересечение множеств
    // операторы друзья класса
    // объединение множеств
    friend Set operator +(const Set& s1, const Set& s2);
    // разность множеств
    friend Set operator -(const Set& s1, const Set& s2);
    // пересечение множеств
    friend Set operator *(const Set& s1, const Set& s2);
    // операторы ввода-вывода
    // ввод элемента в множество из потока
    friend istream& operator >>(istream& in, Set& s);
    // вывод множества в поток
    friend ostream& operator <<(ostream& out, const Set& s);
};

我有一个空白,但我对添加和删除元素有点困惑,帮我弄清楚:

#include "Set.h"
 

    Set::Set(const Set& s) // копирования
    {
        size = s.size; //копируем размерность множества
        p = new int[count];
        memcpy(p, s.p, sizeof(int) * size); //копируем данные
    }
     
    // функции члены класса
     
    int Set::getSize() const // размерность множества
    {
        return size;
    }
    int Set::getCount() const // количество элементов в множестве
    {
        return count;
    }
    void Set::include(const int& n) // включить элемент
    {
     
    }
    bool Set::exclude(const int& n) // исключить элемент
    {
     
    }
    void Set::empty() // очистка множества
    {
        delete[]p;
    }
     
    bool Set::isInSet(const int& n) const // есть такой элемент?
    {
        for (int i = 0; i < size; i++) //ищем символ в массиве
            if (p[i] == n) return true; //нашли - возвращаем 1
        return false; //не нашли - 0
    }
     
    // операторы члены класса
     
    Set& Set::operator = (const Set& s) // присваивание множеств
    { //аналогично конструктору копирования
     
        size = s.size;
        p = new int[count];
        memcpy(p, s.p, sizeof(int) * size);
        return *this;
    }
     
    Set& Set::operator += (const Set& s) // объединение множеств
    {
        if (size + 1 > count || isInSet(s)) return *this; //если max достигнут или такой элемент уже есть - выходим
        p[size] = s; //Добавляем в конец
        size++; //увеличиваем size //не думаю, что правильно + выдает ошибку из-за разных типов
    }
     
    Set& Set::operator -= (const Set& s) // разность множеств
    { //аналогично конструктору копирования
     
        if (size - 1 < count || isInSet(s)) return *this; //если min достигнут или такой элемент уже есть - выходим
        p[size] = s; //Добавляем в конец
        size++; //увеличиваем size //не думаю, что правильно + выдает ошибку из-за разных типов
    }
     
    Set& Set::operator *= (const Set& s) // пересечение множеств
    {
        if (isInSet(s)) return *this;
        p[size] = s; //Добавляем в конец
        size++; //увеличиваем мощность //не думаю, что правильно + выдает ошибку из-за разных типов
    }
     
    // операторы друзья класса
     
     
    // объединение множеств
     
    Set operator + (const Set& s1, const Set& s2)
    {
        Set tmp;
        for (int i = 0; i < s1.size; i++) //просто добавляем к результату все символы первого и второго множеств
            tmp += s1.p[i]; //повторные не добавятся из-за реализации оператора +=
        for (int i = 0; i < s2.size; i++)
            tmp += s2.p[i];
        return tmp;
    }
     
    // разность множеств
    Set operator - (const Set& s1, const Set& s2) 
    {
        Set tmp; //буфер
        for (int i = 0; i < s1.size; i++) //идём по символам первого множества
            if (!s2.isInSet(s1.p[i])) tmp += s1.p[i]; //если символ первого не содержится во втором, добавляем  к результату
        return tmp; //возвращаем буфер
    }
     
    // пересечение множеств
    Set operator * (const Set& s1, const Set& s2)
    {
        Set tmp;
        for (int i = 0; i < s1.size; i++) //если символ первого содержится во втором, добавляем к результату
            if (s2.isInSet(s1.p[i])) tmp += s1.p[i];
        return tmp;
    }
     
    // ввод элемента в множество из потока
    istream& operator >> (istream& in, Set& s)
    {
        cout << "Enter power: ";
        in >> s.size;
        cout << "Enter chars: ";
        for (int i = 0; i < s.size; i++)
            in >> s.p[i];
        return in;
    }
     
    // вывод множества в поток
    ostream& operator << (ostream& out, const Set& s)
    {
        out << "{ ";
        for (int i = 0; i < s.size - 1; i++)
            out << s.p[i] << ", ";
        out << s.p[s.size - 1] << " }";
        return out;
    }
c++ visual-c++
  • 1 个回答
  • 104 Views
Martin Hope
Рома
Asked: 2022-07-15 18:47:38 +0000 UTC

使用了可能未初始化的局部指针变量“矩阵”

  • 0
int i, j, n, m;
char d;//для меню
float** matrix;//объявляем двойной указатель на матрицу

kt:
//    cout << "1- manual input "; 
cout << "1- ручной ввод ";
cout << endl;
cout << "2- ввод из файла ";
cout << endl;
cout << "3- выход ";
cout << endl;
cout << "введите: ";
cin >> d;
cout << endl;
if (d > '3' || d < '1')
{
    cout << "правильно выберите пункт меню и введите число ";
    cout << endl;
    goto kt;
}

if (d == '3') { return 0; }
if (d == '2') { ... }

if (d == '1') {//ручной ввод данных в матрицу
    cout << "Количество уравнений: ";
    cin >> n;//
    cout << "Количество переменных: ";
    cin >> m;//
    m += 1;
    //создаем массив
    float** matrix = new float* [n];
    for (i = 0; i < n; i++) { matrix[i] = new float[m]; }

    //инициализируем

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            cout << " Элемент " << "[" << i + 1 << " , " << j + 1 << "]: ";

            cin >> matrix[i][j];
        }
    }
}
//выводим массив
cout << "расширенная матрица" << endl;
for (i = 0; i < n; i++)
{
    for (j = 0; j < m; j++)
        cout << matrix[i][j] << " "; // Здесь возникает ошибка из вопроса
    cout << endl;
}
cout << endl;

标记错误发生位置的注释(在代码底部)。如何修复它,为什么它未初始化?

c++ visual-c++
  • 2 个回答
  • 50 Views
Martin Hope
Артем Васькевич
Asked: 2022-07-12 15:59:22 +0000 UTC

无法引用的默认构造函数,因为此函数已被删除

  • 0

我写了代码,一切似乎都正确,但出现了错误。请解释该怎么做。代码:

#include<iostream>
#include<string>
#include <windows.h>
    
using namespace std;
    
struct AEROFLOT
{
    string NAZN;
    int NUMR;
    string TIP;
    int TRANS;
    union TIME {
        TIME() {}
        ~TIME() {}
        string NAZV;
        bool TIM;
    } TIME;
};
    int main()
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        AEROFLOT AIPORT[7]; /*Ошибка в этом месте. на конструктор по умолчанию для "AEROFLOT" нельзя ссылаться, так как эта функция удалена*/
        int n = 0, i;
        string nazva;
        while (n < 7)
        {
            cout << "Внесіть данні по рейс згідно його номеру "
                << n + 1 << ":" << endl << "Введіть назву пункту призначення: \n";
            cin >> AIPORT[n].NAZN;
            cout << "Введіть номер рейсу: \n";
            cin >> AIPORT[n].NUMR;
            cout << "Введіть тип літака: \n";
            cin >> AIPORT[n].TIP;
            cout << "Літак з пересадками?(Так - 1, ні - 2): \n";
            cin >> AIPORT[n].TRANS;
            if (AIPORT[n].TRANS == 1) {
                cout << "Введіть пункт пересадки: \n";
                cin >> AIPORT[n].TIME.NAZV;
            }
            else {
                cout << "Введіть час польоту: \n";
                cin >> AIPORT[n].TIME.TIM;
            }
            n++;
        }
        cout << "Введіть назву потрібного вам рейсу: ";
        cin >> nazva;
        n = 0;
        while (n < 7)
        {
            if (AIPORT[n].NAZN == nazva) {
                cout << "Потрібний вам літак: \nПункт призначення:" << AIPORT[n].NAZN << "\nНомер рейсу: " << AIPORT[n].NUMR << "\nТип літака: " << AIPORT[n].TIP;
                if (AIPORT[n].TRANS == 1) {
                    cout << "\nРейс з пересадкою в пункті - " << AIPORT[n].TIME.NAZV << "\nГарної подорожі!";
                }
                else {
                    cout << "\nРейс без пересадок. Час подорожі становить: " << AIPORT[n].TIME.TIM << "\nГарної подорожі!";
                }
                    break;
            }
            else {
                i = 0;
                i++;
                if (i == 7)
                    cout << "\nПотрібного рейсу немає в базі. Гарного дня!";
            }
            n++;
        }
        system("pause");
    }

得到答案后,我更正了代码,出现了一些问题,导致程序在合并的时刻被中断。在此处输入图像描述

c++ visual-c++
  • 2 个回答
  • 135 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5