RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

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

Xambey's questions

Martin Hope
Xambey
Asked: 2020-06-24 19:57:01 +0000 UTC

Vuex:使用默认值正确声明复杂状态对象

  • 0

我有一个带有模块的存储库。这是结构:

结构

存储声明:

Vue.use(Vuex);

export const store = new Vuex.Store({
  strict: process.env.NODE_ENV !== "production", //Защита от изменений не через мутациии
  modules: {
    navigation: navigation,
    crudForm: crudForm,
    toastBar: toastBar,
    progressDialog: progressDialog,
    loginForm: loginForm,
    auth: auth
  },
  getters: globalGetters,
  mutations: globalMutations,
  actions: globalActions,
  state: globalState
});

router.beforeEach((to, from, next) => {
  if (to.name !== "login" && !store.getters["auth/isAuthenticated"]) {
    next({name: "login"});
  }else {
    next()
  }
});

在 state.js (global) 中,描述了全局状态,我在其中声明了以下内容:

export default {
    loginForm: {
        title: "Авторизация",
        toast: "Пользователь авторизован",
        handler: {
            request: {
                url: "/internalauth/auth",
                type: POST,
                parameters: {
                    login: {
                        required: true
                    },
                    password: {
                        required: true
                    }
                }
            }
        }
    },
    pages: [
    ...
    //... Много объектов со вложенными составными объектами, подобных  loginForm
    ]
}

loginForm 模块的操作:

 //loginForm/signIn (action)
 async signIn ({state, rootState, dispatch}) {
      let overlayTimeout = setTimeout(() => dispatch("progressDialog/show", null, {root: true}), 1500);

      console.log(rootState.loginForm.handler); //undefined


      await dispatch("auth/signIn", {
          handler: rootState.loginForm.handler,
          login: state.login,
          password: state.password
      }, { root: true });

      clearTimeout(overlayTimeout);

      dispatch("progressDialog/close", null, {root: true});
}

我需要在 loginForm 模块中获取 loginForm (全局状态),以及所有嵌套对象(及其默认值)。

无论我在哪里尝试获得这种状态,只有标题和 toast 字段被填充,并且处理程序始终未定义。

我试图通过 rootState、mapState(在组件中)、rootGetters(在 state.loginForm.handler 上包装 getter)、mapGetters(在组件中)、this.$store.state.loginForm,没有任何帮助,loginForm.handler 始终为空.

我做错了什么,那我该怎么办?请解释。同样,我从处于全局状态的 pages 数组中获得了类似的复杂对象,并且所有嵌套对象都填充了它。

如果我理解正确,vuex 不会使处理程序反应,我该如何解决这个问题?我知道我可以在应用程序启动时通过 vue.set(...) 在 init 全局状态突变中显式初始化所有这些状态,但这并不方便。我的全局 state.js 有点像全局配置,方便快速配置整个应用环境

请参阅演示,其中,使用类似的方法,处理程序具有值

javascript
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-01-17 08:58:41 +0000 UTC

将文本/csv 转换为 blob [Angular 7/Java]

  • 0

大家好!

我正在尝试将 text/csv 转换为 blob,以便用户可以通过单击按钮下载 csv 文件。

我所拥有的:有一个 API(带有 RESTEasy 的 Java 8),当访问其中一种 POST 方法时,在输出中返回 text/csv:

POSTMAN 中的响应标头 POSTMAN 中的响应正文 Java API (jax-rs) 中的方法代码

Angular 7 上有一个 Web 客户端,我们将讨论其中的问题......当您单击按钮时,以下代码将起作用:

 exportSourceTableToCsv() {

  this.api.postExportToCsv(this.tableSource.toTable())
  .toPromise()
  .then(res => this.saveFile(res));
 }

 public postExportToCsv(table: Table): Observable<any> {

 return this.httpClient.post<any>( apiConfig.EXPORT_TO_CSV, table);
 }

 saveFile(response) {
 //Вот тут я так понимаю проблемное место
 const blob = new Blob([response._body], { type: 'text/csv' });
 saveAs(blob, "table.csv"); //Плагин file-saver из npm для сохранения файлов.
 }

调用最后一个方法时,报错:

ERROR Error: Uncaught (in promise): HttpErrorResponse: {"headers":{"normalizedNames":{},"lazyUpdate":null},"status":200,"statusText":"OK","url":"http://localhost:4200/table/export","ok":false,"name":"HttpErrorResponse","message":"Http failure during parsing for http://localhost:4200/table/export","error":{"error":{},"text":"1;2;33\r\n23;23;33\r\n213;321;33\r\n123;3;33\r\n213;123;33\r\n"}}
at resolvePromise (zone.js:831)
at resolvePromise (zone.js:788)
at zone.js:892
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
at Object.onInvokeTask (core.js:17280)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
at drainMicroTaskQueue (zone.js:601)
at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (zone.js:502)
at invokeTask (zone.js:1744)

来自浏览器的 Postman 响应(预览相同)

如何解决这个问题?我看到了许多具有完全相同方法的示例,它应该可以工作

在创建 Blob 时,我尝试明确指定字符集和文本作为源类型 - 它没有帮助。API中方法的返回类型对我来说不是很重要,但我想使用用于传输的CSV - text/csv

谢谢!

java
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-02-21 01:29:09 +0000 UTC

c# Net core 通过标记路径在 XML 文件中查找错误行号(例如 XPath、Regex、JSON?)

  • 3

你好。情况:有一个模型(反序列化文件),相当大。它有很多字符串和嵌套对象。(YML 目录模型)。

[XmlRoot("yml_catalog")]
public class YMLCatalog
{
    /// <summary>
    /// Дата и время генерации YML файла на стороне магазина
    /// </summary>
    [Required]
    [XmlAttribute("date")]
    public string Date { get; set; }

    /// <summary>
    /// Магазин
    /// </summary>
    [Required]
    [ValidateObject]
    [XmlElement(ElementName = "shop")]
    public Shop Shop { get; set; }
}

/// <summary>
/// Точка продаж
/// https://yandex.ru/support/webmaster/goods-prices/technical-requirements.html
/// </summary>
public class Shop
{
    /// <summary>
    /// Название магазина.
    /// </summary>
    [Required]
    [XmlElement("name")]
    public string Name { get; set; }

    /// <summary>
    /// Название компании
    /// </summary>
    [Required]
    [XmlElement("company")]
    public string Company { get; set; }
    ... и тд.
}

在验证模型时,如果出现错误,我会(通过魔法。请参阅评论中的简短描述)错误的路径。例如,对于价格标签中有错误的 YML 文件,第 0 个报价,作为没有价格,我得到路径:shop/offers/offer['0 或 1',以更方便的为准。对于 XPath,1]/price 值更好:错误文本。(Value - 带有标签值的字段,属性可以类似)

我们感兴趣的是:shop/offers/offer[0]/price

沿着这条路径,我需要确定这个标签所在的行号。告诉用户错误在哪里。

我试过的:

1)通过正则表达式制作。首先,当我获得文件中价格标签的开始索引时,我依次找到路径中元素的索引。然后我收集文件中的行列表并找到要输出的行号,相对于整个文件。- 它有效,但我不喜欢它。太慢了,我可以有非常大的文件

2) 我试图通过 XPath 来实现。也就是说,例如,您可以像这样轻松获取标签元素:

XmlDocument document = new XmlDocument();
document.LoadXml(text);
var node = document.SelectSingleNode("//shop/offers/offer[1]/price");// это для примера

3)有一个选项可以为它创建自己的反序列化器+验证属性,以便将IXmlLineInfo属性分配给元数据中模型中的每个字段- 不幸的是,仅在发出错误信息时才在标准 XmlSerializer 中使用 - 但这很长,而我找到的那些现成的,在net core中是不支持的...... UPD:同样在这种情况下,不仅需要支持复合对象,还需要简单+简单的属性(字符串,整数,长, ETC。)

问题 1: XPath 以某种方式允许您获得上述元素的数量(或更好的列表)?似乎不可能将前置和祖先(链接)结合起来 - 但是同样,即使它成功了,您也必须查找索引,创建文件行列表。- 不太好,我想用另一种方式知道错误的行号

我尝试了“//shop/offers/offer[1]/price/preceding::*”,但在这种情况下,shop 上面的所有元素都被忽略了,我不知道为什么。(当我使用 count(...) 时,我得到了 27 个元素) - 我认为这比正则表达式更好

你知道另一种方法吗?请回答 :)

最大的问题是:那么在给定 XML 和标签路径的情况下,找到错误行号的最佳方法是什么?

PS欢迎解决方案的表现)

c#
  • 3 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-09-28 03:18:54 +0000 UTC

C# 通过 litres.ru 上的 url 从文档中下载图像(只读模式)

  • -2

你好!我最近遇到了从网站 litres.ru 下载图片的问题。

有一些网址:.../pages/read_book_online/?file=15177364&page=0&rt=w640&ft=gif


浏览器解释器将其视为图片,我想下载它,但是出现了问题,没有直接链接到图片(Gif)。也就是说,当您尝试通过 HttpRequest(通过 Stream、HttpResponse 等)或 webclient.DownloadFile(url, "filename.gif") 下载图片时,会下载页面本身(ContentType = text/html)。该页面在浏览器中如下所示: 在此处输入图像描述

问题:如何下载“LMB -> 另存为图像”之类的图像? 我听说过伪浏览器(如果我不这么称呼它是正确的),它直接加载api,模拟真实浏览器的工作,并且可以计算一切。那么c#中有类似的东西吗?还是有其他解决方案?一般来说,我需要下载很多类似的页面。谢谢!

PS如果不难的话,把方法描述得更详细一些,我想很多人会感兴趣:)

UPD:最好没有来自 WindowsForms 的浏览器 在此处输入图像描述 请求获取图像: 在此处输入图像描述

c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-07-02 19:24:41 +0000 UTC

MS SQL SERVER (Ubuntu 16.04.2) 要求

  • 4

你好!有一些聊天机器人(用usingc#和.net core.编写Entity Framework Core)使用.MS SQLMS SQL Server

最近我决定将它上传到服务器(2.2GHz、0.5 内存、10 GB 硬盘),这样它就不会依赖于我的 PC 的状态并在安装过程中遇到问题。

安装MS SQL Server至少需要3.25gb ram,虽然我工作时它吃不超过200 mb,在服务器上它只有500 mb Ram。我不会拉一个更昂贵的服务器。

请告知如何进行。是否可以在安装过程中绕过此限制?还是换subd更好?如果是,最好的选择是什么?('轻的')

PSEF core似乎支持,比如说SQLite,和MySQL。安装是根据这些说明进行的。

在此处输入图像描述 在此处输入图像描述

c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-04-08 18:10:53 +0000 UTC

C++ 正则表达式。递归?

  • 1

您好,我的任务是获取任何表达式中括号对 (...) 之间的内容列表。即,例如: ( test1(test2(test3))。在这个例子中,我应该得到表达式 test2(test3) 和 test3,但没有得到 test1,因为没有对应的右括号。(应该是一样的带左括号,如果没有对,表达式将被忽略。)如果我理解正确,当然是.

作业是逐字的:

1) 检查括号是否正确放置在文本中(即每个左括号的右边是右括号,右括号的左边是左括号) 2) 将正确放置的括号的内容显示在列表的形式。

目前我编译了这样的东西: ((?:[^()]+|\g<2>*)) link to regex101 for convenience。但是我做错了什么,就像我需要在这里使用递归,但我不知道如何做。告诉我如何是对的?

c++
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-03-29 04:05:53 +0000 UTC

记录 C# 时频繁使用静态

  • 1

您好,我在记录来自 Twitch.tv(视频流媒体平台)聊天机器人的消息时遇到了问题。

因此,简而言之,机器人是如何工作的:有一个静态方法Process等待从服务器接收消息并创建一个任务来调用异步处理程序以选择消息的目标通道,添加到队列, Task.Run(() => SwitchMessage(buf))). 在其中,为所需的 Channel 实例调用了一个静态的Handler(message)。一般理解*

现在问题来了。我写了记录器:

internal static class Logger
{
    static readonly int timeHours = 24; 
    static string path = $"./logs/log{DateTime.Now.ToString().Replace(':','.')}.txt";
    static FileStream stream = File.Open(path, FileMode.Append);
    static Timer timerLogFile = new Timer(CreateNewLogFile, null, timeHours * 60 * 60000, timeHours * 60 * 60000);

    public static void Write(string message)
    {
        if (string.IsNullOrEmpty(message))
            return;
        if(stream == null)
            stream = File.Open(path, FileMode.Append);
        var buf = Encoding.UTF8.GetBytes(DateTime.Now.ToString() + ": " + message + "\n");
        stream.Write(buf, 0, buf.Length);
        stream.Flush();
    }
    static void CreateNewLogFile(object obj)
    {
        path = $"./logs/log{DateTime.Now.ToString().Replace(':', '.')}.txt";
        stream = File.Open(path, FileMode.Append);
    }
}

private static void Process()
{
    while (true)
    {
        try
        {
            string s = ircClient.ReadMessage();
            if (s != null)
                Task.Run(() => SwitchMessage(s));

            Thread.Sleep(10);
        }
        catch (Exception ex)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            ShowLineMessage(ex.Message);
            Console.ResetColor();
        }
    }
}

private static void SwitchMessage(string data)
{
    try
    {
        Message currentMessage = new Message(data);

        if(ViewChannel != null && currentMessage.Channel == ViewChannel.Name && currentMessage.Msg != null)
            ShowLineMessage(currentMessage.UserName + ": " + currentMessage.Msg);
        else if(!currentMessage.Success)
        {
            Console.ForegroundColor = ConsoleColor.Green;
            ShowLineMessage(data);
            Console.ResetColor();
            lock (ErrorListMessages)
            {
                if (ErrorListMessages.Count > 50)
                    ErrorListMessages.Clear();
                    ErrorListMessages.Add(currentMessage);
                }
                return;
            }
            else if (currentMessage.UserName == "moobot" || currentMessage.UserName == "nightbot")
                return;

            if (currentMessage.Channel != null && Channels.ContainsKey(currentMessage.Channel))
            {
                Channels[currentMessage.Channel].Handler(currentMessage);
            }
            else
            {
                Channels.First().Value?.Handler(currentMessage);
            }
    }
    catch(Exception ex)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        ShowLineMessage(ex.Source + " " + ex.Message + " " + ex.Data);
        Console.ResetColor();
        return;
    }
}

private void Handler(Message msg)
{
    //...
    SendMessage(message);
    ShowLineMessage(message); 
};

然后问题开始了。Console.WriteLine(...)使用某种方法将输出替换为控制台:

public static void ShowLineMessage(string message)
{
    Console.WriteLine(message);
    Logger.Write(message);
}

这导致了这样一个事实,即随着消息流的增加,开始出现消息重复,从 2 到 6 次重复到控制台,并相应地记录到日志。我不知道那是什么...

ShowLineMessage可以同时调用PS ,例如 100 个消息处理程序(这是很现实的)。操作系统是否会出现频繁调用静态方法的问题ShowLineMessage()?请教如何是好?欢迎对代码提出批评和建议!谢谢!

c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-01-23 03:41:09 +0000 UTC

IRC 客户端(聊天机器人)C# 中的广播消息

  • 1

你好,我正在编写一个 IRC 客户端来与内部twitch IRC 服务器通信并遇到这样的问题:使用多行消息(命令列表)向服务器发出的请求不起作用,因为StreamWriter,当使用 Flush( ) 方法,将 Tcp 数据发送给客户端,而不是批量发送,而是分段发送,或者tcpClient 本身分段发送请求,这不是重点。一般来说,请求被分成几块:(。因此,在将命令列表逐行写入流的情况下,消息根本不会显示。

我试图 在正确的位置用“\n”在一行中发送一个带有消息的请求 - 它在命令的第一行之后切断所有内容(在聊天中显示命令列表的第一行)

问题:是否可以使用多行消息向 irc 服务器发送请求?如果是这样,如何?我附上代码:

    public void sendChatMessage(string message)
    {
        sendIrcMessage(":" + userName + "!" + userName + "@" + userName + "twi.twitch.tv PRIVMSG #" + channel + " :@" + senderName + " " + message);
    }

    public void sendChatBroadcastChatMessage(string message)
    {
        sendIrcMessage(":" + userName + "!" + userName + "@" + userName + "twi.twitch.tv PRIVMSG #" + channel + " : " + message);
    }

    public void sendChatBroadcastChatMessage(List<string> messages)
    {
        messages.Insert(0, ":" + userName + "!" + userName + "@" + userName + "twi.twitch.tv PRIVMSG #" + channel + " : ");
        sendIrcMessage(messages);
    }

userName - 机器人名称,channel - 频道名称

    private void sendIrcMessage(List<string> messages)
    {
        try
        {
            if (outputStream == null)
                throw new Exception("Output stream is empty...");
            foreach (var item in messages)
            {
                outputStream.WriteLine(item);
            }
            outputStream.Flush();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Console.ReadLine();
            return;
        }
    }

在这种情况下,消息是一个命令列表:

        "!hi - приветствие",
        "!date - дата и время сервера",
        "!commands - список команд"

因此调用了 sendChatBroadcastChatMessage(messages)。它将请求添加到消息的开头,并使用更新后的列表调用 sendIrcMessage(messages) 方法。我希望我已经解释得足够多了......

服务器响应:

在此处输入图像描述 谢谢!

c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-12-31 20:52:15 +0000 UTC

内存分配列表C#

  • 2

一个简短的,也许是愚蠢的问题:如何在创建 List<type> 时一次为 n 个元素分配内存?构造函数只允许你设置大概的容量,而不是选择。

如果做不到,那怎么办?我想使用 addRange(INumerable...) 为 1 行中的 n 个元素分配内存。

我听说过一些关于使用 lambda 表达式的单行代码,它们能以某种方式帮助这里还是仅在排序/选择元素时使用它们?请告诉我。不要踢),虽然不,最好踢:)

PS我还需要为List<List<Type>>分配内存,如果你也可以这样写)

c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-12-05 05:13:43 +0000 UTC

访问 joy 时出现问题...(C++)|链接头文件|C++

  • 1

您好,论坛用户!我描述的情况是:AddressBookParser 类没有看到 TextEdit 类。两者都派生自 QT 库中相应的类。*错误*:

'TextEdit' 没有命名类型 TextEdit* edit;

和

没有用于调用“AddressBookParser::AddressBookParser(TextEdit*, QString)”的匹配函数 AddressBookParser* parcer = new AddressBookParser(this,edit->text());

也就是说,无论我在哪里访问或创建 TextEdit 类型的对象

我尝试了我所知道的一切,从声明 AddressBookParcer 之前的 TextEdit 原型开始(我在某处读到如果文件根据列表 1->2->3 相互连接,那么 3 可以识别第二类,xs 它叫什么) ,最后添加严格正确的构造函数,如 TextEdit(QWidget*p):QTextEdit(p){}。

为什么编译器说没有 TextEdit?以及如何解决? 我呼吁你的智慧,谢谢!PS 程序看XML文档,通过number("number="i")输出联系人,在QLineEdit中输入,在TextEdit中应该显示这个联系人的内容,没错,这里用到了SAX(见M . Qt5.3 中的 Schlee 编程,第 40 章)

//addressbookparcer.h
#ifndef ADDRESSBOOKPARSER_H
#define ADDRESSBOOKPARSER_H

#include <QXmlDefaultHandler>
#include <QDebug>
#include <QtWidgets>
#include <QException>
#include <QMessageBox>
#include "textedit.h"


class AddressBookParser : public QXmlDefaultHandler
{
private:
    TextEdit* edit;
    QString _text; // данные
    int number;
    bool finded;
public:
    AddressBookParser(TextEdit* e, QString num)
    {
        number = num.toInt();
        edit = e;
        finded = false;
    }
    //переопределенные методы, расположены в порядке вызова
    virtual bool startElement(const QString &namespaceURI,
                     const QString &localName,
                     const QString &qName,
                     const QXmlAttributes &atts) //атрибуты документа
    {
        finded = false;
        for(int i = 0; i < atts.count(); i++){
            if(atts.value(i) == QString::number(number)) {
                 edit->setText(edit->toPlainText() + "\nAttribute: " + atts.value(i));
                 finded = true;
            }
        }
        return true;
    }

    virtual bool characters(const QString& text)
    {
        _text = text;
        return true;
    }

    virtual bool endElement(const QString&, const QString&, const QString& str)
    {
        if(str != "contact" && str != "addressbook" && finded) { //не обрабатываем /contact, /addressbook
            edit->setText(edit->toPlainText() + "\nTag name: " + str + "\t Text: " + _text);
        }
        return true;
    }

    virtual bool fatalError(const QXmlParseException& ex) //обработка исключительных ситуаций
    {
        qDebug() << "Line: " << ex.lineNumber() << "\t Column: " << ex.columnNumber() << "\t Message: " << ex.message();
        return false;
    }
};
#endif // ADDRESSBOOKPARSER_H

//textedit.h
#ifndef TEXTEDIT_H
#define TEXTEDIT_H
#include "addressbookparser.h"

class TextEdit : public QTextEdit
{
    Q_OBJECT
private:
    QLineEdit* edit;
public:
    TextEdit(QLineEdit* edit){
        this->edit = edit;
    }
public slots:
    void parcerSlot(bool)
    {
        bool f;
        edit->text().toInt(&f);
        if(!f)
            return;
        AddressBookParser* parcer = new AddressBookParser(this,edit->text());
        QFile* file = new QFile("addressbook.xml");

        QXmlInputSource source(file); //объект источника для парсинга документа
        QXmlSimpleReader reader; //ридер документа

        reader.setContentHandler(parcer); //устанавливаем обработчик
        reader.parse(source); //запуск парсинга
    }
};

#endif // TEXTEDIT_H

//main.cpp
#include "textedit.h"

int main(int argc, char** argv)
{
    try{
        QApplication app(argc, argv);

        QWidget wgt;
        wgt.resize(600,100);

        QVBoxLayout* layout = new QVBoxLayout(&wgt);

        QLineEdit* line = new QLineEdit;
        TextEdit* edit = new TextEdit(line);
        QPushButton* button = new QPushButton("обработать");

        layout->addWidget(line);
        layout->addWidget(edit);
        layout->addWidget(button);
        wgt.show();

        QObject::connect(button, SIGNAL(clicked(bool)), edit, SLOT(parcerSlot(bool)));

        return app.exec();
    }
    catch(QException& ex) //обработка ошибок
    {
        QMessageBox M;
        M.setText(QString(ex.what()));
        M.show();
    }

}
c++
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-10-10 03:52:12 +0000 UTC

C++中的多线程:为特定对象创建线程,将非静态函数的名称传递给构造函数

  • 8

你好,最近我不得不开始开发一个多线程应用程序(第一次)并且遇到了这样一个问题:我迫切需要为特定对象创建一个线程,并将非静态函数名称传递给构造函数,谷歌没有给任何有价值的东西。

  1. 告诉我,这可能吗?
  2. 如果不是,它是如何“治疗”的?

在抽象中:有一个类,它有一个我必须通过初始化类构造函数中的指针来跟踪的System非静态方法。private update()private thread* Thread

PS 该update方法被调用move(...),它绑定到对象,即我不能在update不创建一个存储所有用户数据的容器的情况下将其设为静态,这很昂贵

#include <thread>
//еще включения ...
class System
{
    //некоторые поля и методы...
    //...
    thread* Thread;
    static thread* sThread;

    System() {
       Thread = new thread(update);//ошибка! отсутствуют экземпляры констуктора соответствующий ... для std::thread::thread (void())
    }
    void update() {
        //...
        move(...);
        //...
    }
    void move() {
    //работает с полями объекта
    }
};

{
//где-то создается System* system = System;
}

PS(2)用c#爬的,这里可以用非静态方法(like)初始化线程,不要严格判断

c++
  • 4 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-10-05 05:22:17 +0000 UTC

单击箭头 C++

  • 5

我决定编写一个控制台 Mario 并遇到了以下问题:如何通过 WinApi 或使用标准 C++ 工具捕获按下键盘上箭头的事件?(视窗)

void Game::input()
{
    Key key;
    char c;
    while (true)
    {
        cin >> c;
        switch (c)
        {
        case up_key:
            movePlayer(player_pos + new Position(0, -3));
            break;
        case down_key:
            movePlayer(player_pos + new Position(0, 1));
            break;
        case right_key:
            movePlayer(player_pos + new Position(1, 0));
            break;
        case left_key:
            movePlayer(player_pos - new Position(1, 0));
            break;
        }
        show();
    }
}
c++
  • 2 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-10-01 05:34:17 +0000 UTC

在面板上绘图 (WInForms)

  • 4

当前状态的图像你好,作为练习,我决定编写自己的 Paint 模拟(我在面板上绘制,通过BitMap 映射“处理”画布,我还在 PaintBackground 上放置了一个“存根”,以便不调用画布)和遇到了很多问题:

1) 由于某种原因,如果您使用Graphics.Clear(fill color)创建一个 BitMap ,那么背景就这样丢失了,尽管如果您使用现成的图像,那么一切都很好。

2) 我只是无法理解如何渲染元素以致于“它不绘制地图,在地图中”,如果我理解正确的话,这正是发生在我身上的事情。

寻求有关更改绘图技术或如何解决上述问题的建议...

代码(去掉所有不必要的,以免干扰):

class Canvas : Panel
{
    //###################################################################
    //Имя объекта типа Canvas на форме - canvas 
    //###################################################################
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
    }

    protected override void OnPaintBackground(PaintEventArgs e) //"заглушка", если это так называется
    {
    }
}

//описание формы, на которой находится canvas
public partial class MainForm : Form
{
    private bool enableBrush;
    private PointF coordinate;
    private PaintMode mode;
    private Bitmap map;
    private Color colorBrush;

    public enum PaintMode
    {
        None,
        Line,
        Brush,
        Rect,
        Rectangle
    }

    public MainForm()
    {
        InitializeComponent();
        mode = PaintMode.None;
        Graphics g = canvas.CreateGraphics();
        g.Clear(Color.White); //не отображает

        map = new Bitmap(canvas.Width, canvas.Height, g);

        colorBrush = Color.Green;
        enableBrush = false;
    }

    private void canvas_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            coordinate = e.Location; //запоминает позицию курсора при нажатии для рисования
            enableBrush = true;
        }
    }


    private void canvas_MouseUp(object sender, MouseEventArgs e)
    {
        if(e.Button == MouseButtons.Left)
        {
            enableBrush = false;
            map = new Bitmap(canvas.Width,canvas.Height);
            canvas.DrawToBitmap(map, new Rectangle(new Point(), canvas.Size)); // "сейвлю" текущую карту в map(BitMap)
        }
    }

    public void canvas_Paint(object sender, PaintEventArgs e)
    {
        if (enableBrush)
        {
            switch (mode)
            {
                case PaintMode.None:
                    break;
                case PaintMode.Line:
                    e.Graphics.DrawLine(new Pen(colorBrush), coordinate, canvas.PointToClient(MousePosition));
                    break;
                case PaintMode.Brush:
                    break;
                case PaintMode.Rect:
                    break;
                case PaintMode.Rectangle:
                    break;
                default:
                    break;
            }
        }
    }

    private void canvas_MouseMove(object sender, MouseEventArgs e)
    {
        canvas.Invalidate(); //вызываю перерисовку в каждый момент времени, когда курсор мыши находится над canvas
    }

    private void LineButton_CheckedChanged(object sender, EventArgs e)
    {
        if (mode == PaintMode.Line)
            mode = PaintMode.None;
        else
            mode = PaintMode.Line;
    }
}
c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-09-10 22:13:24 +0000 UTC

十六进制数系统

  • 1

告诉我如何将用 , 编写的十六进制数字系统中的数字转换char为int。也就是说,例如:

char c = 'A'; int code = 10; // код А
c#
  • 1 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-09-04 05:06:31 +0000 UTC

C#矩阵实现[重复]

  • 9
这个问题已经在这里得到回答:
如何编写一个适用于所有数字类型的方法/类? (3 个答案)
3 年前关闭。

所以我决定从C++转向C#,遇到了这样的问题。据我了解,Sharpe 中没有模板本身,这是由接口和通用类补偿的。问题:有没有办法让编译器清楚Type是数字?使用标准类型运算符,否则无法实现加法等。矩阵。或者还有其他解决方案吗?这是他所做的:

public class Matrix<Type> /*where Type ...*/ 
{
       private List<List<Type>> MatrixValue;

       public Matrix(int rows, int cols)
       {
           MatrixValue = new List<List<Type>>(rows);
           foreach (var item in MatrixValue)
           {
               item.Capacity = cols;
           }
       }
       public Matrix()
       {
           MatrixValue = new List<List<Type>>();
       }
       public static Matrix<Type> operator +(Matrix<Type> left, Matrix<Type> right)
       {
           Matrix<Type> result = new Matrix<Type>(left.countRows(),   left.countColums());
           for (int i = 0; i < left.countRows(); i++)
           {
               for (int j = 0; j < left.countColums(); j++)
               {
                   result.set(left.get(i, j) + right.get(i, j); // ОШИБКА!
               }
           }
           return ;
       }
  ///...
}
c#
  • 3 个回答
  • 10 Views
Martin Hope
Xambey
Asked: 2020-08-11 22:48:55 +0000 UTC

字符串和终止空

  • 2

我面临使用 Huffman 方法归档文件的任务,我在二进制模式下工作,有时文件中有一个终止空字符,这导致使用 string 出现问题。

问题:是否有可能以某种方式让 string 认为它只是一个字符?如果是这样,如何?而且它非常不愿意受 Cish 字符数组的影响

c++
  • 1 个回答
  • 10 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