2012-03-09 39 views
11

Tôi đang sử dụng C++ và XCode để tạo ra một ứng dụng dòng cmd để lưu file cho phép, tuy nhiên tôi không thể có được phương pháp tinh trùng() được xác định, lỗi này làXCode C++ thiếu tinh trùng()

'Sử dụng khai báo định danh 'tinh trùng'

của tôi bao gồm và các đoạn mã trong câu hỏi dưới ...

// My includes ... 
#include <iostream> 
#include <stdio.h> 
#include <sys/types.h> 
#include <dirent.h> 
#include <string.h> 
#include <vector> 
#include <sys/stat.h> 
#include <dirent.h> 
#include <pwd.h> 
#include <grp.h> 
#include <time.h> 
#include <locale.h> 
#include <langinfo.h> 
#include <stdint.h> 

// Code fragment ... 

dp = opendir ("/var/someplace"); 
if (dp != NULL) 
{ 
    while ((ep = readdir (dp))) 
    { 

     oFile = new FileObject; 

     oFile->setName(ep->d_name); 
     oFile->setIsDirectory(ep->d_type == isFolder); 

     oFiles.push_back (*oFile);    
     // If it's a folder then we can get it's innards 

     if (stat(ep->d_name, &statbuf) == -1) 
      continue; 
     cout << "%10.10s", sperm(statbuf.st_mode); 

     iFile++; 
    } 



    closedir (dp); 
} 
else 
    perror ("Couldn't open the directory"); 
+37

Tôi sẽ Google cho "tinh trùng người đàn ông" ... –

+0

Vui lòng xác định không hoạt động. Ans những gì một tên chức năng wow! – Iznogood

+2

@OliCharlesworth: Tôi nghĩ rằng tôi sẽ ngại khi nhấp vào bất kỳ trận đấu nào, đặc biệt là tại nơi làm việc! –

Trả lời

11

Điều này có thể làm cho tôi trông giống như một kẻ hư hỏng, nhưng tôi tìm kiếm google 'tinh trùng' (ofcourse chỉ cho .h và .cpp các tập tin). Tin xấu là tôi không thể tìm thấy bất kỳ tham chiếu nào đến nó (ngoại trừ trên trang stat function chính nó).

Tin tốt lành là tôi thấy this đoạn mã trong đó xác định riêng của nó 'tinh trùng' chức năng:

char const * sperm(__mode_t mode) { 
    static char local_buff[16] = {0}; 
    int i = 0; 
    // user permissions 
    if ((mode & S_IRUSR) == S_IRUSR) local_buff[i] = 'r'; 
    else local_buff[i] = '-'; 
    i++; 
    if ((mode & S_IWUSR) == S_IWUSR) local_buff[i] = 'w'; 
    else local_buff[i] = '-'; 
    i++; 
    if ((mode & S_IXUSR) == S_IXUSR) local_buff[i] = 'x'; 
    else local_buff[i] = '-'; 
    i++; 
    // group permissions 
    if ((mode & S_IRGRP) == S_IRGRP) local_buff[i] = 'r'; 
    else local_buff[i] = '-'; 
    i++; 
    if ((mode & S_IWGRP) == S_IWGRP) local_buff[i] = 'w'; 
    else local_buff[i] = '-'; 
    i++; 
    if ((mode & S_IXGRP) == S_IXGRP) local_buff[i] = 'x'; 
    else local_buff[i] = '-'; 
    i++; 
    // other permissions 
    if ((mode & S_IROTH) == S_IROTH) local_buff[i] = 'r'; 
    else local_buff[i] = '-'; 
    i++; 
    if ((mode & S_IWOTH) == S_IWOTH) local_buff[i] = 'w'; 
    else local_buff[i] = '-'; 
    i++; 
    if ((mode & S_IXOTH) == S_IXOTH) local_buff[i] = 'x'; 
    else local_buff[i] = '-'; 
    return local_buff; 
} 

sử dụng rất đơn giản:

#include <sys/types.h> 
#include <sys/stat.h> 
#include <iostream> 

int main(int argc, char ** argv) 
{ 
    std::cout<<sperm(S_IRUSR | S_IXUSR | S_IWGRP | S_IROTH)<<std::endl; 
    std::cout<<sperm(S_IRUSR)<<std::endl; 
    std::cout<<sperm(S_IRUSR | S_IRGRP | S_IWOTH | S_IROTH)<<std::endl; 
    return 0; 
} 

đầu ra trên ideone:

r-x-w-r-- 
r-------- 
r--r--rw- 
+0

Tôi cũng không ở nơi làm việc và đã có thể làm một số googling, và thấy điều này: http://answers.yahoo.com/question/index?qid=20091108232812AA2Vtb4 tham chiếu đến một chức năng BeOS mà làm điều tương tự. – dantswain

+0

Xin chào, cảm ơn vì đã tìm ra điều đó, như một người C++ hoàn toàn mới, bất kỳ cơ hội nào bạn có thể cho tôi biết cách tôi có thể tích hợp mã đó vào mã của tôi. Trên một lưu ý khác để thêm vào câu chuyện hài hước về câu hỏi cụ thể này, nó thực sự là một sự xấu hổ tuyệt vời rằng phản ứng từ BJ Homer đã không trả lời câu hỏi tinh trùng() vì đó sẽ là công lý thơ mộng. – creativetechnologist

+0

@creativetechnologist Tôi đã chỉnh sửa câu trả lời cho bạn để xem cách sử dụng chức năng này –

1

Giả sử các hàm được định nghĩa (và tôi sẽ không để google cái tên đó từ nơi làm việc), bạn gặp rắc rối với cách bạn đang in nó:

cout << "%10.10s", sperm(statbuf.st_mode); 

Đó sẽ không để in một chuỗi định dạng, kể từ C++ iostreams không làm việc như C của printf. Bạn có thể hoặc không định dạng nó:

cout << sperm(statbuf.st_mode); 

hoặc sử dụng printf:

printf("%10.10s", sperm(statbuf.st_mode)); 

hoặc làm một số trò lừa phỉnh với thao tác iostream.

+0

Cảm ơn, đã đồng ý với nhu cầu định dạng nhưng chức năng vẫn xuất hiện với 'Sử dụng số nhận dạng không khai báo' tinh trùng ' – creativetechnologist

+0

OK, tôi không thể giúp với điều đó mà tôi sợ. Bạn nên cập nhật câu hỏi để mô tả sự cố. –

+0

Không phải lo lắng, đã cập nhật câu hỏi như bạn đã đề xuất, cảm ơn bạn đã nhập. – creativetechnologist

4

Tôi đã gặp phải điều này vài năm trước. Tôi không cảm thấy thích thú khi lướt qua Google với thuật ngữ tìm kiếm cụ thể vào lúc này, nhưng nếu tôi nhớ chính xác, câu trả lời là sperm() là một chức năng hệ thống không chuẩn có sẵn trên Solaris. Nhưng vì nó không phải là một phần của tiêu chuẩn unix, bạn sẽ không tìm thấy nó trên OS X.

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