简单代码需要帮助 - 没有构造函数实例匹配参数列表
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 <vector>
了吗?
什么是Vector<T>
,我的意思是大写V?
是的,我做了#include std::vector<int> v = 1,2,3;
和std::vector<std::string> 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<int> v = 1,2,3;
时抱怨Vector
没有匹配的构造函数,宏替换后变为Vector<int> 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: Cflags
,Clang: 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
和&& $dir$fileNameWithoutExt
之间添加-std=c++11
就像:
【讨论】:
【参考方案3】:尝试使用#include <string>
来定义字符串。
还有using namespace std;
最后一行让您跳过 std::
前面的内容。
【讨论】:
以上是关于简单代码需要帮助 - 没有构造函数实例匹配参数列表的主要内容,如果未能解决你的问题,请参考以下文章
MFC CFileDialog派生类在编译过程出现“error 没有与参数列表匹配的构造函数......”的问题
没有重载函数“AfxBeginThread”的实例与参数列表匹配