2016-02-04 77 views
-1

目前我正在嘗試運行一些我從lynda.com收到的代碼,但它正在吐出一個錯誤。我試圖編譯的文件如下,僅包括調用strnlen(strc.cpp):MinGW g ++`strnlen`沒有在這個範圍內聲明

#include <cstdio> 
#include <cstring> 
#include <memory> 

#include "strc.h" 

... 

strc::strc() : data(nullptr) { 
    msg("default ctor"); 
} 

strc::strc(const char * s) { 
    size_t slen = strnlen(s, _maxlen); 
    data = new char[slen + 1]; 
    data[slen] = 0; 
    memcpy(data, s, slen); 
    msg("cstring ctor"); 
} 

strc::strc(const strc & f) { 
    size_t slen = strnlen(f.data, _maxlen); 
    data = new char[slen + 1]; 
    data[slen] = 0; 
    memcpy(data, f.data, slen); 
    msg("copy ctor"); 
} 
... 

若要編譯此我運行:

g++ -c strc.cpp -o strc.o -std=c++11

我已經嘗試用string.h代替cstring,我甚至嘗試過,但在strnlen之前std::。在這個問題上的任何幫助將深受讚賞

+0

能否請您爲我們提供了錯誤信息?是不是說這個'strnlen'沒有在這個範圍內聲明? –

+0

複製構造函數可以使用'strlen'和'strcpy'來代替,因爲'f'在'f'的構造過程中已經被限制在'_maxlen'下 –

回答

2

strnlen是不是一個標準的C++函數。我想你以前一直在使用其他編譯器,它提供了這種非標準的擴展。

您將需要更改您的代碼,以便不調用此函數;或者提供具有類似功能的你自己的功能(不叫它strnlen)。

+0

我試過這段代碼和MSVC,它編譯得很好,我只是假定它也應該在g ++中工作。這不是我自己的代碼,正如我提到我從lynda.com得到它,我會看看我能做些什麼來修復它 – PurityLake

+0

將'strnlen'的調用替換爲'strlen',編譯並運行良好 – PurityLake

0

正確的標題爲strlen的是:

#include <string.h> 

參考:strnlen

+1

問題詢問'strnlen',而不是'strlen' –

+0

此外,''提供'' –

+0

@MM的所有功能感謝您的關注,我更正了我的答案。 ......錯過了'n'出:) – dmi

相關問題