小编Spa*_*ter的帖子

g ++编译器错误:无法推断模板参数'_Funct'

我正在尝试使用ANSI C++ for_each语句迭代并打印标准向量的元素.如果我有for_each调用非重载函数,它会工作,但如果我调用一个重载函数,则会产生编译器错误.

这是一个最小的测试程序,用于显示编译器错误发生的位置:

#include <algorithm>
#include <iostream>
#include <vector>

struct S {
    char c;
    int i;
};
std::vector<S> v;

void print_struct(int idx);
void print_struct(const struct S& s);

// f: a non-overloaded version of the preceding function.
void f(const struct S& s);

int main()
{
    v.push_back((struct S){'a', 1});
    v.push_back((struct S){'b', 2});
    v.push_back((struct S){'c', 3});

    for (unsigned int i = 0; i < v.size(); ++i)
        print_struct(i);

    /* ERROR! */
    std::for_each(v.begin(), v.end(), print_struct);

    /* WORKAROUND: */
    std::for_each(v.begin(), v.end(), f);

    return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ foreach templates

9
推荐指数
2
解决办法
3325
查看次数

为什么我的非递归sqrt函数递归?

我有以下名为test.cpp的C++测试程序:

#include <cmath>
#include <iostream>

double sqrt(double d) { return std::sqrt(d); }

int main()
{
    std::cout << "sqrt(4): " << sqrt(4) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这是一些非常人为的代码,你可能已经猜到我只是想用Stroustrup做一个练习.他宣称双sqrt(双)​​,并希望读者定义它.

我使用g ++ 4.8(来自Qt 5.1的MINGW版本)编译了上面的代码:

C:\Windows\Temp>g++ -o test.exe -g test.cpp
Run Code Online (Sandbox Code Playgroud)

当我运行生成的可执行文件时,Windows 7说"test.exe已停止工作".

要查看出了什么问题,我在GNU调试器中运行了test.exe.调试器命令和输出:

C:\Windows\Temp>gdb -q test.exe
Reading symbols from C:\Windows\Temp\test.exe...done.
(gdb) b main
Breakpoint 1 at 0x401625: file test.cpp, line 8.
(gdb) run
Starting program: C:\Windows\Temp\test.exe
[New Thread 12080.0x2ba0]

Breakpoint 1, main () at test.cpp:8
8           std::cout << "sqrt(4): " << sqrt(4) << std::endl;
(gdb) s …
Run Code Online (Sandbox Code Playgroud)

c++ g++ cmath sqrt visual-c++

5
推荐指数
2
解决办法
416
查看次数

如何将 Citrix 中的 C# 程序实例限制为每用户 1 个

我有一个带有 C# 代码的 Windows 窗体应用程序,如下所示(针对 .NET Framework 4)。

在我的开发人员工作站上,此代码可以阻止我启动该程序的多个实例。但是,QA 有一个 Citrix 测试环境,每个用户仍然能够启动多个实例。

如何防止给定用户在 Citrix 中运行多个实例?

[STAThread]
static void Main(string[] args)
{
    bool isFirstInstance;
    Mutex m = new Mutex(true, "[App name goes here] mutex", out isFirstInstance);

    if (isFirstInstance)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run();

        // Prevent the just-in-time (JIT) compiler from optimizing away our Mutex.
        // See: http://www.ai.uga.edu/mc/SingleInstance.html
        GC.KeepAlive(m);
    }
}
Run Code Online (Sandbox Code Playgroud)

出于技术原因,我们希望限制实例数量。该程序使用自承载 WCF 与同一用户运行的另一个进程进行通信。我们只希望每个用户有一个该程序的实例。

我不知道有关 Citrix 环境的任何详细信息,但可以询问。

谢谢。

c# mutex citrix multiple-instances

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

为什么java.lang.Long(MAX_VALUE)中只有63位?

谁能解释下面两个println语句的输出之间的区别?

public class LongTest {
    public static void main(String[] args) {
        System.out.println(Long.toBinaryString(0xffff_ffff_ffff_ffffL));
        System.out.println(java.lang.Long.toBinaryString(Long.MAX_VALUE));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

1111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)

第一行输出包含64位二进制数字.第二行仅包含63个二进制数字.

如果0xffff_ffff_ffff_ffffL大于Long.MAX_VALUE,我会发现编译器错误.但程序显然会编译,因此输出的差异必然是由于某些其他原因.

java binary max long-integer

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

标签 统计

c++ ×2

binary ×1

c# ×1

citrix ×1

cmath ×1

foreach ×1

g++ ×1

java ×1

long-integer ×1

max ×1

multiple-instances ×1

mutex ×1

sqrt ×1

templates ×1

visual-c++ ×1