简单代码需要帮助 - 没有构造函数实例匹配参数列表

Posted

技术标签:

【中文标题】简单代码需要帮助 - 没有构造函数实例匹配参数列表【英文标题】:Simple Code Need Help - no instance of constructor matches argument list 【发布时间】:2014-08-09 06:27:27 【问题描述】:

我正在关注一本关于 C++ 编程的书,但我被向量困住了。书中的例子是:

vector<int> v = 1,2,3;

但我收到一个错误:

    1   IntelliSense: no instance of constructor "Vector<T>::Vector [with T=int]" matches the argument list
        argument types are: (int, int, int) ../path

另外,当我创建字符串向量时:

vector<string> v = "one", "two", "three"

我收到此错误:

    1   IntelliSense: no instance of constructor "Vector<T>::Vector [with T=std::string]" matches the argument list
        argument types are: (const char [4], const char [4], const char [6]) ../path

我正在使用带有 2013 年 11 月 CTP 编译器的 VS 2013。我做错了什么?

【问题讨论】:

#include &lt;vector&gt;了吗? 什么是Vector&lt;T&gt;,我的意思是大写V? 是的,我做了#include 。我真的不知道这些错误信息是什么意思,我是新手。 尝试std::vector&lt;int&gt; v = 1,2,3;std::vector&lt;std::string&gt; v = "one", "two", "three"; 并反馈。 让我猜猜,这本书是 Bjarne Stroustrup 的Programming: Principles and Practices Using C++吗? 【参考方案1】:

总结和扩展 cmets 和 Bjarne Stroustrup 的 "std_lib_facilities.h" 标头中所写的内容:

标头包含一个经过简单范围检查的向量类,称为Vector,用于教学目的;

要使Vector 成为标准库中vector 的“无缝”替代品(同样,出于教学目的),标题包含以下几行:

// disgusting macro hack to get a range checked vector:
#define vector Vector
OP 可能使用了本书第一版的标题(它是 std_lib_facilities.h 的*** Google 搜索结果),其 Vector 没有 initializer_list 构造函数(该版本使用 C++98 ,它没有初始化列表)。 因此,编译器在看到vector&lt;int&gt; v = 1,2,3; 时抱怨Vector 没有匹配的构造函数,宏替换后变为Vector&lt;int&gt; v = 1,2,3;

要解决此问题,请下载并使用正确版本的标头。

【讨论】:

【参考方案2】:

这可能和你配置的编译环境有关。

以我的为例:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() 
     vector<string> msg "Hello", "C++", "World", "from", "VS Code", "and the C++ extension!";

     for (const string& word : msg) 
          cout << word << " ";
     
     cout << endl;

如果在在线编译器中编译,则成功运行。

eg:programiz:

https://www.programiz.com/cpp-programming/online-compiler/

还有,那个输出:

Hello C++ World from VS Code and the C++ extension! 

但是如果在 Visual Studio Code 中编译器,那将和你有同样的问题。

“no instance of constructor "std::__1::vector<_Tp, _Allocator>::vector [with _Tp=std::__1::string, _Allocator=std::__1::allocator<std::__1::string>]" matches the argument list”

这是怎么发生的?或者,到底发生了什么?

我从来不配置这些文件,例如:"launch.json","c_cpp_properties.json"

我是直接下载VS Code和插件C/C++后直接编译的。

我认为解决问题的诀窍是确保配置的编译环境没有问题。

例如:如果IDE有问题,那么我可以将它迁移到在线编译器中测试是否可以编译成功。

如果你和我一样,没有配置文件也出现同样的问题,那么问题的根源就是配置文件失败。

最后,Visual Studio Code 在 macOS 中配置 C/C++ 编译环境文件比较困难,但是可以解决。

还有,可能和你的C++语言版本有关,

Use g++ -std=c++11 <filename> when compiling.

最好使用这个命令来运行你的代码:

g++ -g -Wall -std=c++11 helloworld.cpp

或者,请在 VS 代码中配置你的 tasks.json:

"args": [
      "-g",
      "-Wall",
      "-std=c++11",
      "-stdlib=libc++",
      "-g",
      "$file",
      "-o",
      "$fileDirname/$fileBasenameNoExtension"
    ],

在任务的"args" 中添加"-g""-Wall"。 总之,

首先,

报此错误是因为C++98在初始化向量容器时不允许指定初始元素值。

那是C++11,需要配置c++11支持。

    如果您的问题出在 VS 代码中,则在 .vscode/task.json 以及 -std=c++11-stdlib=libc++ 配置中配置 c++11 支持。

其次,

如果你还在VS代码中使用了C/C++ Clang Command Adapter插件,

因为C/C++ Clang Command Adapter插件默认没有配置支持C++11,

您还需要配置 c++11 支持。

1.点击Code->Preferences->Settings,搜索Clang: CflagsClang: Cxxflags,添加C++11配置;

2.Clang: Cflags 添加项目:"-std=c11"Clang: Cxxflags 添加项目:"-std=c++11"

第三,

另外,你需要C++11运行环境配置。

    点击Code Runner⚙的齿轮(或直接右键)打开扩展设置;

    找到Code-runner: Executor Map,点击Edit in settings.json

    "code-runner.executorMap"中找到"cpp"这一行;

    -std=c++11 添加到$fileNameWithoutExt 的末尾并保存以供使用。

或者,

1.编辑你的环境配置./vscode/setting.json/;

2.找到"code-runner.executorMap":;

3.在"code-runner.executorMap":中找到"cpp":

4.在$fileNameWithoutExt&amp;&amp; $dir$fileNameWithoutExt之间添加-std=c++11

就像:

【讨论】:

【参考方案3】:

尝试使用#include &lt;string&gt; 来定义字符串。 还有using namespace std;

最后一行让您跳过 std:: 前面的内容。

【讨论】:

以上是关于简单代码需要帮助 - 没有构造函数实例匹配参数列表的主要内容,如果未能解决你的问题,请参考以下文章

MFC CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数......”的问题

没有重载函数“AfxBeginThread”的实例与参数列表匹配

没有函数模板“max”的实例与参数列表参数类型匹配是 (int, int)

没有重载函数的实例匹配参数列表 C++

CUDA模板错误:没有函数模板的实例与参数列表匹配

没有函数模板“std::make_pair”的实例与参数列表匹配