小编Mat*_*Sot的帖子

为什么我的HelloWorld函数未在此范围内声明?

#include <iostream>

using namespace std;

int main()
{
    HelloWorld();
    return 0;
}

void HelloWorld()
{
    cout << "Hello, World" << endl;
}
Run Code Online (Sandbox Code Playgroud)

我用g ++得到以下编译错误:

l1.cpp: In function 'int main()':
l1.cpp:5:15: error: 'HelloWorld' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

c++ scope

51
推荐指数
6
解决办法
6万
查看次数

为什么这个协议"只能用作通用约束"?

我试图在Swift中执行以下操作:

protocol ProtocolWithAlias {
    typealias T
}

protocol AnotherProtocol {
    func someFunc() -> ProtocolWithAlias
}
Run Code Online (Sandbox Code Playgroud)

但我得到错误:Protocol 'ProtocolWithAlias' can only be used as a generic constraint because it has Self or associated type requirements.

可以这样做吗?错误消息(或至少" only be used as a generic constraint"部分)对我来说似乎没有多大意义.

我正在使用最新的Xcode 6 beta 3.

谢谢!

generics swift xcode6

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

Google文档如何处理编辑冲突?

我一直在编写自己的Javascript编辑器,其功能类似于Google Docs(允许多人同时处理它).有一点我不明白:

假设您已将用户A和用户B直接相互连接,网络延迟为10毫秒.我假设编辑器使用diff系统(据我理解Docs),其中编辑表示为"在索引3处插入'文本',并且差异被加时间戳并强制按时间顺序应用于所有客户端.

让我们从包含文本的文档开始:"xyz123"

用户A在时间戳001ms处在文档的开头键入"abc",而用户B在时间戳005ms处在"xyz"和"123"之间键入"hello".

两个用户都希望结果是:"abcxyzhello123",但考虑到网络延迟:

  • 用户B将在时间011ms接收用户A对"在索引0处插入'abc'的编辑.为了保持按时间顺序排列,用户B将在索引3处撤消用户B的插入,在索引0处插入用户A的"abc",然后在索引3处重新插入用户B的插入,该索引现在位于"abc"和"xyz之间" ,"因此给"abchelloxyz123"
  • 用户A将在时间015ms接收用户B对"在索引3处插入'hello'的编辑.它会认识到用户B的插入是在用户A之后完成的,只需在索引3处插入"hello"(现在在"abc"和"xyz"之间),给出"abchelloxyz123"

当然," abchello xyz123"与" abc xyz hello 123"不一样

除了字面上为每个角色分配自己的唯一ID之外,我无法想象Google将如何有效地解决这个问题.

我想到的一些可能性:

  • 跟踪插入点而不是使用差异发送索引将起作用,但如果用户B在编辑之前移动了1ms的插入点,则会遇到完全相同的问题.
  • 您可以让用户B使用他的差异发送一些信息,例如"在'xyz'之后插入'",这样用户A就可以智能地识别出这种情况,但是如果用户A插入文本"xyz?"该怎么办?
  • 用户B可以识别出这种情况发生了(当它收到用户A的差异并发现它是冲突时),然后发出一个diff撤消用户B的编辑和一个新的差异,它进一步插入用户B的"你好""abc".length索引对.这个问题是(1)用户A会在文本中看到"跳跃",(2)如果用户A继续编辑,则用户B必须不断修复其差异 - 即使"修复者"差异也会关闭并需要修复,指数增加复杂性.
  • 用户B可以发送一个属性,它接收到的最后一个时间戳差异是-005ms或者其他东西,然后A可以识别B不知道它的变化(因为A的差异在001ms)然后进行冲突解决.问题是(1)所有用户的时间戳都会稍微偏离,因为大多数计算机时钟都不准确到ms;(2)如果第三个用户C的用户A延迟25ms,但用户B滞后2ms,用户C在-003ms之间在"x"和"y"之间添加一些文本,然后用户B将用户C的编辑作为参考点,但是用户A不会知道用户C的编辑(以及用户B的参考点)直到22ms.我相信如果您使用通用服务器为所有编辑加时间戳,这可以解决,但这似乎相当复杂.
  • 你可以给每个角色一个唯一的ID,然后处理那些ID而不是索引,但这似乎有点过分......

我正在阅读http://www.waveprotocol.org/whitepapers/operational-transform,但很想听到解决这个问题的所有方法.

algorithm editing google-docs collaborative-editing operational-transform

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

Roslyn workspace.OpenSolutionAsync().项目总是空的?

我正在尝试创建一个自托管的WebAPI 2.0项目,允许您通过API打开/探索/构建.sln解决方案.

这是我的一个控制器中的代码,它应该返回给定.sln路径的项目列表:

public async Task<IHttpActionResult> GetProjects(string slnPath = "")
{
    var workspace = MSBuildWorkspace.Create();
    var solution = await workspace.OpenSolutionAsync(slnPath);
    var projects = solution.Projects;
}
Run Code Online (Sandbox Code Playgroud)

我预计项目举行项目的解决方案,但根据调试器,solution.Projects并且solution.ProjectIds似乎总是空的.

我尝试过多个.sln文件,所有这些文件都可以在Visual Studio中打开,看看它们中有项目.

我已经看到了这个问题,但我的项目不是Visual Studio的添加,它是一个从命令行应用程序调用的类库.

roslyn

18
推荐指数
2
解决办法
3407
查看次数

XDocument到XElement

如何将XDocument转换为XElement?

我通过搜索找到了以下内容,但是它用于在XDocument和XmlDocument之间进行转换,而不是XDocument和XElement.

public static XElement ToXElement(this XmlElement xmlelement)
{
    return XElement.Load(xmlelement.CreateNavigator().ReadSubtree());
}

public static XmlDocument ToXmlDocument(this XDocument xdoc)
{
    var xmldoc = new XmlDocument();
    xmldoc.Load(xdoc.CreateReader());
    return xmldoc;
}
Run Code Online (Sandbox Code Playgroud)

我找不到任何将XDocument转换为XElement的东西.任何帮助,将不胜感激.

c# xml xelement linq-to-xml

17
推荐指数
3
解决办法
3万
查看次数

用Roslyn获取'var'的类型?

我有一个名为'test.cs'的.cs文件,它基本上是这样的:

namespace test
{
    public class TestClass
    {
        public void Hello()
        {
            var x = 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图用Roslyn解析这个并得到x的类型,它应该是'int',但我只能发现它是'var'类型,我似乎无法获得实际的底层类型.

这基本上就是我现在的代码

var location = "test.cs";
var sourceTree = CSharpSyntaxTree.ParseFile(location);

var root = (CompilationUnitSyntax)sourceTree.GetRoot();
foreach (var member in root.Members)
{
    //...get to a method
    var method = (MethodDeclarationSyntax())member;
    foreach (var child in method.Body.ChildNodes())
    {
        if (child is LocalDeclarationStatementSyntax)
        {
            //var x = 1;
            child.Type.RealType()?
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到真正的孩子?我已经看到一些事情说我应该使用SemanticModel或Solution或Workspace,但我似乎无法找到如何使用Roslyn加载我的测试解决方案然后获得'x'的类型.

此外,我还没有找到任何非常好的Roslyn文档,它似乎都散布在一堆不同的版本中,对于像我这样的初学者来说没什么.有没有人知道我可以阅读的"Roslyn简介"或类似的快速入门?

.net c# roslyn

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

如何创建包含每个单词(通配符)的PhraseList?

我正在尝试创建一个包含语音命令的Windows Phone 8应用程序.语音命令有点像"艺术家的顶级歌曲是什么",所以我需要使用某种通配符"[artist]",这将允许用户说出任何艺术家.如果没有在PhraseList中列出世界上的每一位艺术家,我怎么能这样做呢?

c# windows-phone-8

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

使用Roslyn从ObjectCreationExpressionSyntax获取构造函数声明?

我试图用罗斯林采取的对象创建表达式C#源文件,并添加名称的所有参数(所以从new SomeObject("hello")new SomeObject(text: "hello").

我从SyntaxTree获得了ObjectCreationExpressionSyntax以及解决方案的SemanticModel.我试图用GetSymbol/TypeInfoObjectCreationExpressionSyntax的类型,但我似乎无法使用得到的参数名称.

基本上我想要的是这个:

具体是参数Something.Something.

c# roslyn

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

错误:EPERM,Node.js和Etherpad Lite不允许操作

我尝试在我的计算机上安装Etherpad Lite站点并运行IIS,然后再将其上载到Azure for Web Sites,但是当我尝试(http://pastebin.com/4rZWbqix)时出现此错误:

处理请求时,iisnode遇到错误.HRESULT:0x2 HTTP状态:500 HTTP原因:内部服务器错误

您收到此HTTP 200响应,因为system.webServer/iisnode/@devErrorsEnabled配置设置为"true".

除了node.exe进程的stdout和stderr的日志之外,请考虑使用调试和ETW跟踪来进一步诊断问题.

node.exe进程生成到stdout和stderr的最后64k输出如下所示:fs.js:520返回

      binding.lstat(pathModule._makeLong(path));
              ^ Error: EPERM, operation not permitted 'C:\Users\Matthew'
at Object.fs.lstatSync (fs.js:520:18)
at Object.realpathSync (fs.js:1047:21)
at tryFile (module.js:142:15)
at Function.Module._findPath (module.js:181:18)
at Function.Module._resolveFilename (module.js:336:25)
at Function.Module._load (module.js:280:25)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)
Run Code Online (Sandbox Code Playgroud)

在Etherpad的目录中没有fs.js文件,所以我认为它是Node.js的一部分有问题.我是Node.js的新手,所以任何帮助都会受到赞赏.

编辑1:我目前正在寻找Azure的替代品,并授予C:\ Users\Matthew权限.但是有可能以某种方式修改fs.js以在try.lstat周围放置一个try/catch吗?

编辑2:稍微玩了一下(添加权限工作!),我已经得到它的工作.但现在加载127.0.0.1:81返回:

处理请求时,iisnode遇到错误.HRESULT:0x2 HTTP状态:500 HTTP原因:内部服务器错误

您收到此HTTP 200响应,因为system.webServer/iisnode/@devErrorsEnabled配置设置为"true".

除了node.exe进程的stdout和stderr的日志之外,请考虑使用调试和ETW跟踪来进一步诊断问题.

node.exe进程生成到stdout和stderr的最后64k输出如下所示:

[x1B] [33m [2012-10-03 20:28:13.587] [WARN] console - [x1B] [找到39mNo设置文件.继续使用默认值!

[x1B] [32m [2012-10-03 20:28:14.338] [INFO] console - [x1B] [39mInstalled plugins:

看起来这不是一个错误,因为输出的是预期的,但似乎停在plugins.formatPlugins().

azure node.js etherpad iisnode

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

Visual Studio缩进HTML标记内容

我在Visual Studio 2013中安装了Resharper和Web Essentials,并希望缩进我的.cshtml文件中HTML标记的内容.

所以我不想要(并且似乎是默认的):

<html>
<body>
    <h1>Hello!</h1>
<body>
</html>
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像:

<html>
    <body>
        <h1>Hello!</h1>
    <body>
</html>
Run Code Online (Sandbox Code Playgroud)

我已经从Resharper中删除了所有内容 - >选项 - >代码编辑 - > HTML - >格式化样式 - >不要缩进子项.

我还检查工具 - >选项 - >文本编辑器 - > HTML(Web窗体) - >格式 - >标记特定选项 - >客户特定的标签 - > HTML - >缩进内容无济于事.

请注意,我没有工具 - >选项 - >文本编辑器 - > HTML - >格式化,而是我有两个子树,HTML和HTML(Web窗体),其中只有HTML(Web窗体)具有格式化选项.

有人知道如何让Visual Studio这样做吗?每当我添加新标签时,看到完美格式化的HTML文档就会出现在窗口中,这非常烦人.谢谢!

resharper visual-studio visual-studio-2013 resharper-9.0

7
推荐指数
2
解决办法
2609
查看次数