SORU
26 ŞUBAT 2013, Salı


C : değişken 'std::' başlatıcı ama eksik olan ifstream eğerler yazın

Üzgünüm bu güzel noobish, ama C için yeni sayılırım . Bir dosya açın ve ifstream kullanarak okumaya çalışıyorum:

vector<string> load_f(string file) {
  vector<string> text;

  ifstream ifs(file);
  string buffer, str_line;

  int brackets = 0;
  str_line = "";

  while ( getline(ifs, buffer) ) {
    buffer = Trim( buffer );
    size_t s = buffer.find_first_of("()");

    if (s == string::npos) str_line  = ""   buffer;
    else {
      while ( s != string::npos ) {
        str_line  = ""   buffer.substr(0, s   1);
        brackets  = (buffer[s] == '(' ? 1 : -1);

        if ( brackets == 0 ) {
          text.push_back( str_line );
          str_line = "";
        }

        buffer = buffer.substr(s   1);
        s = buffer.find_first_of("()");
      }
    }
  }

  return text;
}

Ancak, düzeltmek için nasıl emin değilim ama aşağıdaki hatayı alıyorum:

variable 'std::ifstream ifs' has initializer but incomplete type

Cevapları çok takdir ettim. Hiç hata sadece başlığını da unutma nedeniyle aldık, çünkü #include <fstream>, unuttum unutmayın.

DÜZENLEME:

Ben aslında fstream, eklemeyi unuttun çıkıyor ama başka bir dosyaya işlevi hareket nedeniyle unutmuşum.

CEVAP
12 Kasım 2014, ÇARŞAMBA


Çift vektörler vektörler çiftleri olarak depolanır neden bilmiyorum, ama kolayca veri elemanları sırayla saklamak için örnekleri yazabilirsiniz.

{-# LANGUAGE TypeFamilies, MultiParamTypeClasses #-}

import qualified Data.Vector.Generic as G 
import qualified Data.Vector.Generic.Mutable as M 
import Control.Monad (liftM, zipWithM_)
import Data.Vector.Unboxed.Base

data Point3D = Point3D {-# UNPACK #-} !Int {-# UNPACK #-} !Int {-# UNPACK #-} !Int

newtype instance MVector s Point3D = MV_Point3D (MVector s Int)
newtype instance Vector    Point3D = V_Point3D  (Vector    Int)
instance Unbox Point3D

Bu noktada son satırı Point3D için vektör türlerinin örnekleri vardır beri hiç bir hata neden olur. Aşağıdaki gibi yazılabilir

instance M.MVector MVector Point3D where 
  basicLength (MV_Point3D v) = M.basicLength v `div` 3 
  basicUnsafeSlice a b (MV_Point3D v) = MV_Point3D $ M.basicUnsafeSlice (a*3) (b*3) v 
  basicOverlaps (MV_Point3D v0) (MV_Point3D v1) = M.basicOverlaps v0 v1 
  basicUnsafeNew n = liftM MV_Point3D (M.basicUnsafeNew (3*n))
  basicUnsafeRead (MV_Point3D v) n = do 
    [a,b,c] <- mapM (M.basicUnsafeRead v) [3*n,3*n 1,3*n 2]
    return $ Point3D a b c 
  basicUnsafeWrite (MV_Point3D v) n (Point3D a b c) = zipWithM_ (M.basicUnsafeWrite v) [3*n,3*n 1,3*n 2] [a,b,c]

instance G.Vector Vector Point3D where 
  basicUnsafeFreeze (MV_Point3D v) = liftM V_Point3D (G.basicUnsafeFreeze v)
  basicUnsafeThaw (V_Point3D v) = liftM MV_Point3D (G.basicUnsafeThaw v)
  basicLength (V_Point3D v) = G.basicLength v `div` 3
  basicUnsafeSlice a b (V_Point3D v) = V_Point3D $ G.basicUnsafeSlice (a*3) (b*3) v 
  basicUnsafeIndexM (V_Point3D v) n = do 
    [a,b,c] <- mapM (G.basicUnsafeIndexM v) [3*n,3*n 1,3*n 2]
    return $ Point3D a b c 

Fonksiyon tanımları çoğu kendi kendini açıklayıcı olduğunu düşünüyorum. Puan vector in bir vektör olarak saklanır ve son noktası 3,3 1,3 n 2 değer vermez.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Authority

    Android Auth

    3 NİSAN 2011
  • Chriselle Lim

    Chriselle Li

    26 Ocak 2008
  • inovationgmbh

    inovationgmb

    28 EYLÜL 2010