2012-05-05 29 views
6

Tôi hy vọng ai đó có thể giúp tôi về vấn đề nhỏ này khi tôi không nhận được bất kỳ nơi nào cả. Trước tiên, cô ấy có mã:Không thể sử dụng cout/endl khi extern "C"

#include<string> 
#include<iostream> 
#include<Windows.h> 

using namespace std; 

extern "C" 
{ 
#include<hidsdi.h> 
#include<SetupAPI.h> 
} 

int main() 
{ 
    int iQuit; 

    cout << "Testing Program" << endl; 

    return 0; 
} 

Nó sẽ không cho phép tôi sử dụng công cụ tiêu chuẩn (tức là cout, cin, endl, v.v.). Nó sẽ chỉ cho phép tôi sử dụng nó khi tôi đưa ra tất cả các mã "C" bên ngoài ... Tại sao vậy? Và có cách nào để giải quyết vấn đề này không?

EDIT: Xin lỗi, quên nói với bạn những lỗi chính xác: Nó nói định danh "cout" là undefined

Cảm ơn

+0

tôi sẽ không sử dụng std toàn cầu anyway. Bạn có thể di chuyển không gian tên bằng cách sử dụng std; bên trong chính. – ervinbosenbacher

+0

Mục đích 'extern' C ''phục vụ ở đây là gì? –

+0

Vì cout không phải là từ khóa C mà là một cá thể đơn lẻ C++. Bạn không thể truy cập các đối tượng C++ từ mã C thuần túy (mặc dù nó có thể theo cách khác). –

Trả lời

0

Tôi đã phát hiện ra sự cố, tôi đã không thêm các thư mục theo đúng thứ tự trong Thư mục VC++.

Trình tự nên là:

C: \ WinDDK \ 7600.16385.1 \ inc \ DDK

$ (VCInstallDir) bao gồm

$ (VCInstallDir) atlmfc \ include

C : \ WinDDK \ 7600.16385.1 \ inc \ api

$ (WindowsSdkDir) bao gồm

$ (FrameworkSDKDir) \ include

Không biết lý do tại sao nó cần phải được theo thứ tự này, nhưng nó hoạt động ngay bây giờ ... Rất lạ ...

+0

Phát triển trình điều khiển khác nhau. Bạn cần phải viết mã trong C và bạn cần phải cẩn thận mà tiêu đề bạn bao gồm. Chỉ bao gồm các tiêu đề cấp cao nhất, ví dụ: ntddk.h –

+0

@DavidHeffernan Cảm ơn lời khuyên :). Tôi biết bạn cứ nói viết trình điều khiển trong C, nhưng nó thực sự là xấu để được viết nó trong C + + ?? – Danny

+2

Vâng. Bạn sẽ làm gì khi mã C++ của bạn tăng một ngoại lệ? Điều đó không đẹp trong tài xế. Và có những mối quan tâm khác. Tìm kiếm trên web đã dẫn tôi đến cuộc thảo luận này: http://msdn.microsoft.com/en-us/windows/hardware/gg487420 –

3

Có gì đó sai với môi trường biên dịch của bạn. Không có gì sai với mã đó. Nó biên dịch và chạy tốt.

Trong một bình luận cho câu hỏi bạn nói:

I'm learning to write a driver so I can do stuff with my devices like keyboards and mouses, so I'm using the WDK. Correct me if I'm wrong, but I thought you need to use extern "C" to use those header files?

Trong thực tế, bạn chỉ đơn giản là nên viết mã trong C chứ không phải C++ để phát triển tài xế.

+0

hmm ... không bao giờ biết bạn có thể biên dịch mã là C: S. Làm cách nào để kiểm tra? : S – Danny

+0

Bạn đang biên soạn nó như thế nào? Trình biên dịch gì và tùy chọn dòng lệnh nào? Và tên của tập tin là gì? Cụ thể là phần mở rộng là gì. –

+0

Tôi đang sử dụng Visual Studios 2010. Tên tệp là Mainframe.cpp – Danny

Các vấn đề liên quan