Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

câu hỏi thường gặp về thư viện chuẩn C++

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 154419
Tóm tắt
Bài viết này trình bày một danh sách các câu hỏi thường gặp (FAQ) về thư viện chuẩn C++ và câu trả lời cho những câu hỏi. Để biết thêm thông tin về các thư viện chuẩn C++, hãy tham khảo ANSII đặc tả tiêu chuẩn và thư viện MSDN.
Thông tin thêm

Thư viện chuẩn C++ câu hỏi thường gặp

Câu hỏi 1: Tính năng thư viện chuẩn C++ chứa nào?

A1: Thư viện chuẩn C++ cung cấp một khung mở rộng và bao gồm các thành phần hỗ trợ ngôn ngữ, chẩn đoán, Tiện ích chung, Chuỗi, ngôn ngữ, thư viện khuôn mẫu chuẩn (hộp, vòng lặp, thuật toán và numerics) và đầu vào/đầu ra.

Thư viện chuẩn C++ được chia thành các loại sau:
  1. Thành phần tiêu chuẩn thư viện biểu mẫu (STL) cung cấp C ++ chương trình truy cập vào một tập hợp được sử dụng thuật toán và datastructures. STL tiêu đề có thể được chia thành ba khái niệm các tổ chức:
    • Chứa: mẫu lớp đó hỗ trợ phổ biến cách sắp xếp dữ liệu, chẳng hạn như <vector>, <list>, <deque>, <stack>, <queue>, <set>, và <map>.</map> </set> </queue> </stack> </deque> </list> </vector>
    • Thuật toán: mẫu chức năng để thực hiện các hoạt động phổ biến trên các đối tượng, chẳng hạn như <functional>, <algorithm>, và <numeric>.</numeric> </algorithm> </functional>
    • Vòng lặp: keo dán thuật toán và chứa cùng, chẳng hạn như <utility>, <iterator>, và <memory>.</memory> </iterator> </utility>
  2. Đầu vào/đầu ra bao gồm các thành phần trước declarationsof iostreams (<iosfwd>), được xác định trước các đối tượng iostreams (<iostream>), iostreams lớp cơ sở (<ios>), dòng đệm (<streambuf>), dòng định dạng và thao tác (<iosmanip>, <istream>,<ostream>), Chuỗi dòng (<sstream>), và tệp luồng (<fstream>).</fstream> </sstream> </ostream> </istream> </iosmanip> </streambuf> </ios> </iostream> </iosfwd>
  3. Bao gồm các tiêu chuẩn C++:
    • Hỗ trợ ngôn ngữ: cho các định nghĩa loại thông thường được sử dụng trong thư viện (<cstddef>), đặc điểm định loại (<limits>, <cfloat>, <climits>), chức năng hỗ trợ Bắt đầu và kết thúc chương trình C++ (<cstdlib>), hỗ trợ cho việc quản lý bộ nhớ động (<new>), hỗ trợ để xác định loại động (<typeinfo>), hỗ trợ xử lý ngoại lệ (<exception>), và các hỗ trợ thời gian chạy (<cstdarg>, <ctime>, <csetlmp>, <csignal>).</csignal> </csetlmp> </ctime> </cstdarg> </exception> </typeinfo> </new> </cstdlib> </climits> </cfloat> </limits> </cstddef>
    • Chẩn đoán: thành phần báo cáo một số loại điều kiện đặc biệt (<stdexcept>), tài liệu chương trình khẳng định (<cassert>), và một biến chung cho lỗi mã số (<cerrno>).</cerrno> </cassert> </stdexcept>
    • Dây: cho chuỗi lớp (<string>) và kết thúc null tự tiện ích (<cctype>, <cwctype>, <cwchar>).</cwchar> </cwctype> </cctype> </string>
    • Bản địa hoá: thành phần C++ chương trình có thể sử dụng để đóng gói khác biệt văn hóa. Cơ sở ngôn ngữ có hỗ trợ quốc tế đối chiếu phân loại và chuỗi kí tự đại diện, số, tiền tệ, và định dạng ngày/giờ và phân tích cú pháp và truy xuất thư (<locale>, <clocale>).<b00> </b00> </clocale> </locale>
back to the top

Câu hỏi 2: Sự khác biệt giữa C Runtime và thư viện chuẩn C++ là gì? Thư viện nào sẽ Runtime library tùy chọn biên dịch như /ML, /MT, /MD, /MLd, /MTd/MDd ?

A2: Visual C++ 5.0 và mới hơn bao gồm các thư viện sau ngoài thư viện lớp nền tảng của Microsoft (MFC):
  • Cơ sở C-Runtime library
  • Thư viện chuẩn C++
Thư viện loại và liên quan biên dịch chuyểnCơ bản C Runtime library / thư viện chuẩn C++
Một luồng (/ ML)LIBC. LIB / LIBCP. LIB
Gỡ lỗi một luồng (/ MLd)LIBCD. LIB / LIBCPD. LIB
Multithreaded (/ MT)LIBCMT. LIB / LIBCPMT. LIB
Gỡ lỗi Multithreaded (/ MTd)LIBCMTD. LIB / LIBCPMTD. LIB
Multithreaded DLL (/ MD)MSVCRT. LIB / MSVCPRT. LIB
Gỡ lỗi Multithreaded /DLL (MDd)MSVCRTD. LIB / MSVCPRTD. LIB
Lưu ý: /ML và /MLd tùy chọn biên soạn thư viện tĩnh một luồng thư viện đã bị xoá trong Visual C++ 2005 và các phiên bản Visual C++.

Lưu ý: MSVCPRT.lib và MSVCPRTD.lib tĩnh thư viện và thực hiện không có bất kỳ thư viện liên kết động (DLL) liên quan trực tiếp cho họ. Các thư viện đều phụ thuộc vào MSVCRT.lib và MSVCRTD.lib, tương ứng. Nếu bạn có bất kỳ ứng dụng nào sử dụng MSVCPRT.lib hoặc MSVCPRTD.lib và bạn sử dụng tuỳ chọn "Bỏ qua mặc định thư viện" (/NOD hoặc NODEFAULTLIB), hãy liên kết MSVCPRT.lib (hoặc MSVCPRTD.lib) và MSVCRT.lib (hoặc MSVCRTD.lib) với ứng dụng của bạn. Ngoài ra, bạn sẽ nhận được lỗi linker (LNK2001: chưa được giải quyết externals MSVCPRT.lib hay MSVCPRTD.lib) khi kết nối ứng dụng của bạn.) Tuỳ thuộc vào tiêu đề bạn sử dụng mã, một thư viện thư viện chuẩn C++ cũng có thể được liên kết.

Các tập tin tiêu đề <use_ansi.h>chứa #pragma báo cáo buộc thư viện chuẩn C++ được liên kết trong. Bao gồm tất cả các tiêu chuẩn C++ <use_ansi.h>: nếu bạn có bất kỳ tiêu đề tiêu chuẩn C++ trong ứng dụng của bạn, thư viện chuẩn C++ sẽ được liên kết theo mặc định.</use_ansi.h> </use_ansi.h>

Tiêu đề tiêu chuẩn C++

THUẬT TOÁN BITSET PHỨC TẠP DEQUE
NGOẠI LỆ FSTREAM CHỨC NĂNG IOMANIP
IOS IOSFWD IOSTREAM ISTREAM
ITERATOR GIỚI HẠN DANH SÁCH NGÔN NGỮ
BẢN ĐỒ BỘ NHỚ SỐ OSTREAM
HÀNG ĐỢI THIẾT LẬP SSTREAM XẾP CHỒNG
STDEXCEPT STREAMBUF CHUỖI STRSTREAM
TYPEINFO TIỆN ÍCH VALARRAY VÉC-TƠ
back to the top

Câu hỏi 3: Làm thế nào để tôi giữ lại chức năng iostream cũ từ Visual C++ .NET 2003 hoặc các phiên bản Visual C++ nếu tôi cổng dự án của tôi từ phiên bản trước?

A3: Nếu bạn muốn giữ lại thư viện iostream cũ (<iostream.h>), bao gồm một hoặc nhiều tệp tiêu đề iostream cũ trong mã. Sử dụng các tiêu đề tiêu chuẩn C++ mới. Bạn không thể kết hợp cuộc gọi đến thư viện iostream cũ và thư viện chuẩn C++ mới.

</iostream.h>back to the top

Câu hỏi 4: Làm cách nào để các thư viện chuẩn C++ thư viện mặc định cho myapplication?

A4: Nếu bạn muốn làm cho thư viện chuẩn C++ mặc định, bao gồm một hoặc nhiều tiêu đề tiêu chuẩn C++ mới. Hãy nhớ rằng, bạn không thể kết hợp các cuộc gọi iostream cũ và thư viện chuẩn C++ mới. Hiện tại thư viện (tĩnh hoặc động liên kết) sử dụng cũ iostream chức năng cần phải được thay đổi để sử dụng chức năng iostream thư viện chuẩn C++.

back to the top

Câu hỏi 5: tôi muốn sử dụng thư viện chuẩn C++ trong ứng dụng lớp nền tảng của Microsoft (MFC). Sẽ thiscause bất kỳ xung đột với các thư viện C-chạy?

A5: Không. MFC không sử dụng bất kỳ chức năng C Runtime sẽ xung đột với các thư viện chuẩn C++.

back to the top

Câu hỏi 6: Tại sao tôi nhận lỗi "lỗi C2065: 'cout': nhận dạng chưa tuyên bố" ngay cả khi có <iostream>?</iostream>

A6: Thư viện chuẩn C++ được thực hiện trong không gian riêng của mình "chuẩn". Hãy chắc chắn để thêm lệnh
using namespace std;				
Bắt đầu chương trình của bạn hoặc để mỗi thư viện chuẩn C++ nhận dạng với không gian tên std, ví dụ: std::cout.

back to the top

Câu hỏi 7: Tại sao tôi nhận được "lỗi biên soạn C2371: 'định danh' redefinition; cơ sở loại"?

A7: Phiên bản Visual C++ cũ hơn Visual C++ 2005, trộn thư chuẩn C++ và cũ iostream tiêu đề gây ra lỗi này, ngay cả khi chúng được bao gồm trong tệp nguồn khác nhau. Sau đây là các tiêu đề khác nhau:

Cũ iostream tiêu đề

FSTREAM. H IOMANIP. H
IOS. H IOSTREAM. H
ISTREAM. H OSTREAM. H
STDIOSTR. H STREAMB. H
STRSTREA. H

Tiêu đề tiêu chuẩn C++

THUẬT TOÁN BITSET PHỨC TẠP DEQUE
NGOẠI LỆ FSTREAM CHỨC NĂNG IOMANIP
IOS IOSFWD IOSTREAM ISTREAM
ITERATOR GIỚI HẠN DANH SÁCH NGÔN NGỮ
BẢN ĐỒ BỘ NHỚ SỐ OSTREAM
HÀNG ĐỢI THIẾT LẬP SSTREAM XẾP CHỒNG
STDEXCEPT STREAMBUF CHUỖI STRSTREAM
TYPEINFO TIỆN ÍCH VALARRAY VÉC-TƠ
back to the top

Câu hỏi 8: tôi có một dự án được xây dựng với các tùy chọn "Bỏ qua thư viện mặc định" (/NOD hoặc /NODEFAULTLIB). Visual C++ 5.0 hoặc phiên bản mới hơn, tôi nhận được lỗi linker "LNK2001: biểu tượng bên ngoài chưa được giải quyết 'biểu tượng';" trên tất cả các cuộc gọi chức năng iostream. Điều gì đã thay đổi?

A8: Chức năng iostream đã bị xoá khỏi thư viện C-chạy.

Nếu bạn đang sử dụng các chức năng iostream cũ, bạn phải thêm một thư viện bổ sung như sau: LIBCI.lib (một luồng <ML>), LIBCIMT.lib (multithreaded <MT>) hoặc MSVCIRT.lib (multithreaded dll <MD>). Thư viện này đã được gỡ bỏ từ Visual C++ 2005 và các phiên bản Visual C++.

Nếu bạn đang sử dụng tính năng iostream mới đi kèm với thư viện chuẩn C++, bạn phải thêm một thư viện bổ sung như sau: LIBCP.lib (một luồng <ML>), LIBCPMT.lib (multithreaded <MT>) hoặc MSVCPRT.lib (multithreaded dll <MD>).

Không kết hợp các phiên bản khác nhau của thư viện. Ví dụ: nếu bạn đang sử dụng phiên bản một luồng C Runtime library, bạn cũng phải sử dụng phiên bản một luồng thư viện iostream cũ hoặc thư viện chuẩn C++.

Bạn không thể kết hợp cuộc gọi đến chức năng thư viện iostream cũ và chức năng iostream thư viện chuẩn C++ mới.

</MD></MT></ML></MD></MT></ML>back to the top

Câu hỏi 9: tôi nhận được cảnh báo trình C4786 và/hoặc C4788. Không có chương trình inmy biểu tượng là ở bất cứ đâu gần 255 kí tự đại diện. Causingthis là gì?

A9: C4786/C4788 được thực hiện khi một biểu tượng tên vượt 255 kí tự đại diện. Điều này thường xảy ra với khuôn mẫu lớp và STL mẫu lớp sử dụng rộng rãi.

Bỏ qua cảnh báo này thường là an toàn. Sử dụng cảnh báo #pragma (tắt: 4786,4788) để ngăn chặn thư.

back to the top

Câu hỏi 10: tôi nhận được cảnh báo trình biên soạn "C4530: C++ ngoại lệ xử lý sử dụng, butunwind ngữ nghĩa không được kích hoạt. Chỉ định - GX." Điều này có nghĩa là gì?

A10: Chương trình sử dụng thư viện chuẩn C++ phải được biên dịch với xử lý ngoại lệ C++ được kích hoạt. Xử lý ngoại lệ C++ có thể được kích hoạt:
  • Chọn tuỳ chọn cho phép xử lý ngoại lệC++ ngôn ngữ mục tab C/C++ , hộp thoại Thiết đặt dự án . - hoặc -

  • Sử dụng /GX biên dịch chuyển.
back to the top

Câu hỏi 11: tôi nhận được lỗi biên soạn C2146, theo C2065 và cuối cùng C2143, tất cả chỉ đến cùng một dòng trong nguồn của tôi. Điều này có nghĩa là gì?

A11: Chuỗi lỗi này có thể do loại xây dựng, sau đây:
vector<int, allocator<int>>iV;				
Sự cố do sự liên tục ">>" vào tuyên bố. Giải pháp là đặt một dấu kiểm cách giữa hai chữ để xây dựng trở thành:
vector<int, allocator<int> > iV;				
Điều này là phù hợp với số ANSII được đề xuất.

back to the top
STL STL. H cấp phát véc-tơ deque danh sách ánh xạ multimap đặt hàng đợi multiset ngăn xếp priority_queue

Thuộc tính

ID Bài viết: 154419 - Xem lại Lần cuối: 06/02/2015 05:53:00 - Bản sửa đổi: 3.0

Microsoft Visual C++ 2008 Express Edition

  • kbinfo kbmt KB154419 KbMtvi
Phản hồi
https://c.microsoft.com/ms.js">