标签: msvc12

C++,在实现函数`int next(std :: string param)`时出现奇怪的编译器错误

我被以下代码严重咬了,我浪费了很多宝贵的时间.

#include<string>

int next(std::string param){
    return 0;
}

void foo(){
    next(std::string{ "abc" });
}
Run Code Online (Sandbox Code Playgroud)

这会产生以下编译器错误(在Visual Studio 2013上):

1>------ Build started: Project: sandbox, Configuration: Debug Win32 ------
1>  test.cpp
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(371): error C2039: 'iterator_category' : is not a member of 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>'
1>          c:\users\ray\dropbox\programming\c++\sandbox\test.cpp(8) : see reference to class template instantiation 'std::iterator_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char>>>' being compiled
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(371): error C2146: syntax error : missing ';' before identifier 'iterator_category'
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility(371): error C4430: …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors msvc12

22
推荐指数
3
解决办法
2969
查看次数

"功能没有地址"尽管已禁用优化(/ Od)

在MSVC 2012中的调试期间,我试图从Watch窗口调用一些函数,以便将数据转储到文件.但是,我不断收到此错误:

Function Matrix::Save has no address, possibly due to compiler optimizations.   
Run Code Online (Sandbox Code Playgroud)

该类Matrix位于我自己的外部库中.快速检查显示外部库中的所有方法都没有地址,并且所有从Watch调用它们的尝试都会返回此错误,但头文件中定义的除外.主项目中的方法都具有地址,无论它们在何处定义.

当然,在整个解决方案中禁用优化.符号正常加载.我如何解决它?

c++ compiler-optimization visual-c++ msvc12

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

无法将字符串文字分配给boxed std :: string向量

这是我的类型系统的简化版本:

#include <string>
#include <vector>

template<typename T>
class Box {
public:
    Box(const T& value) : _value(value) {};
private:
    T _value;
    /* ... */
};

typedef Box<int> Int;
typedef Box<double> Double;
typedef Box<std::string> String;

int main(int argc, char* argv[]) {
    String a("abc");
    std::vector<String> b = { std::string("abc"), std::string("def") };

    // error C2664: 'Box<std::string>::Box(const Box<std::string> &)' : cannot convert argument 1 from 'const char' to 'const std::string &'
    std::vector<String> c = { "abc", "def" };
}
Run Code Online (Sandbox Code Playgroud)

虽然ab编译,c …

c++ constructor visual-c++ c++11 msvc12

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

带有指定初始化程序的MSVC12(VS2013)中可能存在的编译器错误

使用VS2013 Update 2,我偶然发现了一些奇怪的错误消息:

// test.c
int main(void)
{
    struct foo {
        int i;
        float f;
    };

    struct bar {
        unsigned u;
        struct foo foo;
        double d;
    };

    struct foo some_foo = {
        .i = 1,
        .f = 2.0
    };

    struct bar some_bar = {
        .u = 3,

// error C2440 : 'initializing' : cannot convert from 'foo' to 'int'
        .foo = some_foo,

        .d = 4.0
    };

// Works fine
    some_bar.foo = some_foo;

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

GCC和Clang都接受了.

我错过了什么或这段代码是否暴露了编译器错误?

编辑:重复:使用指定的初始化程序在另一个结构中初始化struct会导致Visual …

c designated-initializer compiler-bug visual-studio-2013 msvc12

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

为什么is_copy_constructible在MSVC12中对unique_ptr返回true

我原以为这个静态断言会被激发:

#include <type_traits>
#include <memory>

int main() {
  static_assert(std::is_copy_constructible<std::unique_ptr<int>>::value, "UPtr has copy constructor?");
}
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.

使用MSVC12编译:

用于x64的Microsoft(R)C/C++优化编译器版本18.00.31101

c++ type-traits c++11 msvc12

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

如何修复错误MSB4018:Visual Studio 2013中的"VCMessage"任务意外失败

这就是我所看到的:

1>------ Build started: Project: xxx (xxx\xxx), Configuration: Debug Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018: The "VCMessage" task failed unexpectedly.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018: System.FormatException: Index (zero based) must be greater than or equal to zero and less than the size of the argument list.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at System.String.Format(IFormatProvider provider, String format, Object[] args)
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB4018:    at Microsoft.Build.Shared.ResourceUtilities.FormatString(String unformatted, Object[] …
Run Code Online (Sandbox Code Playgroud)

msvc12

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

什么是GCC默认导出所有符号与MSVC之间默认导出任何符号的设计原理?

C++编译器GCC和MSVC之间的许多关键差异之一是,默认情况下,共享库中的所有符号都会被导出,而MSVC则不会导出任何符号.

一些含义是,在MSVC中,您必须导出explict实例化的模板类.

虽然我已经接受了这一点作为生活中的事实,但我想知道每种方法的设计含义,权衡,编译器设计者的角度等等是什么?

c++ gcc visual-c++ msvc12

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

std::promise 如何在 MSVC、GCC 和 Clang 中存储 const 类型?

最近,我开始使用 MSVC 来编译一直使用 GCC 和 Clang 编译的代码。这段代码的某些部分会产生一个有趣的编译错误(被截断):

C:/data/msvc/14.33.31424-Pre/include\future(311) error C2678: binary '=': no operator found which takes a left-hand operand of type 'const Result' (or there is no acceptable conversion)
<source>(7): note: could be 'Result &Result::operator =(Result &&)'
<source>(7): note: or       'Result &Result::operator =(const Result &)'
Run Code Online (Sandbox Code Playgroud)

这段代码的最小示例:

#include <future>
#include <iostream>

struct Result {
    int data{0};
};

// getting rid of constness resolves the problem for MSVC
using result_t = const Result; 
using promise_result_t = std::promise<result_t>;

auto compute_result(promise_result_t …
Run Code Online (Sandbox Code Playgroud)

c++ gcc clang visual-c++ msvc12

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

Delphi:使用Debugger调用C dll函数需要15 s而无需调试器0.16 s.为什么?

我有以下设置:

  1. Delphi命令行应用程序,用Delphi XE5编写,内置Debug 64位.
  2. AC dll用Microsoft Visual Studio 2013编写,内置版本64位.
  3. Delphi命令行应用程序调用C dll中的函数.

出乎意料的是:

  1. 在Delphi XE5 IDE中调试Delphi命令行应用程序时,C dll函数调用需要15秒.
  2. 当直接启动相同的Delphi命令行应用程序(没有IDE,没有调试器)时,C dll函数调用需要0.16秒.

Delphi命令行应用程序源代码:

program DelphiCpplibraryCall;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  System.SysUtils,
  Windows;

type
  TWork = function(Count : Integer) : Integer; cdecl;
var
  Handle : THandle;
  Work   : TWork;
  Result : Integer;
  Freq   : Int64;
  Start  : Int64;
  Stop   : Int64;
begin
  try
    Handle := LoadLibraryEx('worker.dll', 0, LOAD_WITH_ALTERED_SEARCH_PATH);
    Work := GetProcAddress(Handle, 'work');

    QueryPerformanceFrequency(Freq);
    QueryPerformanceCounter(Start);
    Result := Work(500000);
    QueryPerformanceCounter(Stop);
    Writeln(Format('Result: %d Time: %.6f s', [Result, (Stop-Start) …
Run Code Online (Sandbox Code Playgroud)

c++ delphi dll performance msvc12

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

MSVC 安装在哪里?- 检测“cl.exe”和“link.exe”的位置

我记得过去人们vcvarsall.bat在 Windows 上编译任何东西之前都会先运行一下。假设默认安装位置,我在哪里可以找到cl.exelink.exe、 和朋友;如果它不在PATH

试图:

#include <stdlib.h>
#include <stdio.h>

#include <Windows.h>

const inline LPCWSTR find_cl() {
    /* Most of this list derived from 
       https://gitlab.kitware.com/cmake/cmake/-/blob/417b765f/Modules/GetPrerequisites.cmake#L670 */
    static const LPCSTR cl_paths[12] = {
        "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin",
        "C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\bin",
        "C:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\bin",
        "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\bin",
        "C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\bin",
        "C:\\Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\bin",
        "C:\\Program Files\\Microsoft Visual Studio 8\\VC\\BIN",
        "C:\\Program …
Run Code Online (Sandbox Code Playgroud)

c visual-studio-2010 visual-c++ visual-studio-2012 msvc12

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